Search code examples
c#listdataview

List<T> to DataView


How to convert List to a dataview in .Net.


Solution

  • 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 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;
    }
    

    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;