2010-10-01 2 views
10

Как преобразовать Список в файл данных в .Net.Список <T> DataView

+0

A более ориентированный на объект, чем принятый ответ, будет использовать метод, аналогичный ответам на этот вопрос. [Сортировка списка с использованием выражений запроса] (http://stackoverflow.com/questions/695906/sort-a-listt-using-query-expressions) Предполагается, что единственная причина, по которой вам нужен список dataview предназначен для функции сортировки. – Amicable

ответ

18

Мое предложение состояло в том, чтобы преобразовать список в DataTable, а затем использовать представление по умолчанию таблицы для создания DataView.

Во-первых, вы должны создать таблицу данных:

// <T> is the type of data in the list. 
// If you have a List<int>, for example, then call this as follows: 
// List<int> ListOfInt; 
// DataTable ListTable = BuildDataTable<int>(ListOfInt); 
public static DataTable BuildDataTable<T>(IList<T> lst) 
{ 
    //create DataTable Structure 
    DataTable tbl = CreateTable<T>(); 
    Type entType = typeof(T); 
    PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entType); 
    //get the list item and add into the list 
    foreach (T item in lst) 
    { 
    DataRow row = tbl.NewRow(); 
    foreach (PropertyDescriptor prop in properties) 
    { 
     row[prop.Name] = prop.GetValue(item); 
    } 
    tbl.Rows.Add(row); 
    } 
    return tbl; 
} 

private static DataTable CreateTable<T>() 
{ 
    //T –> ClassName 
    Type entType = typeof(T); 
    //set the datatable name as class name 
    DataTable tbl = new DataTable(entType.Name); 
    //get the property list 
    PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entType); 
    foreach (PropertyDescriptor prop in properties) 
    { 
    //add property as column 
    tbl.Columns.Add(prop.Name, prop.PropertyType); 
    } 
    return tbl; 
} 

Далее, получить представление по умолчанию в DataTable в:

DataView NewView = MyDataTable.DefaultView; 

Полный пример будет выглядеть следующим образом:

List<int> ListOfInt = new List<int>(); 
// populate list 
DataTable ListAsDataTable = BuildDataTable<int>(ListOfInt); 
DataView ListAsDataView = ListAsDataTable.DefaultView; 
+1

Незначительная коррекция CreateTable также должна быть статической. – user3141326

 Смежные вопросы

  • Нет связанных вопросов^_^