Hi, How to convert List to a dataview in .Net.
The DataTable columns must be accessed from column name, not by indexr as the GetProperties method return properties in a random order.
Adeel
2010-10-01 12:26:14
A:
There is a stackoverflow question solving List to DataTable : http://stackoverflow.com/questions/564366/generic-list-to-datatable
gcores
2010-10-01 12:22:36
+1
A:
My suggestion would be to convert the list into a DataTable, and then use the table's default view to build your DataView.
First, you must build the data table:
// <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 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;
}
Next, get the DataTable's default view:
DataView NewView = MyDataTable.DefaultView;
A complete example would be as follows:
List<int> ListOfInt = new List<int>();
// populate list
DataTable ListAsDataTable = BuildDataTable<int>(ListOfInt);
DataView ListAsDataView = ListAsDataTable.DefaultView;
JeffFerguson
2010-10-01 12:29:55