Search code examples
c#wpfmvvmdatagridobservablecollection

observablecollection to dataView or dataset


I have a Datagrid formed by binding observablecollection, Now i want to provide Export to excel Functiom, So i need to Convert by datagrid to dataset or dataview.

public ObservableCollection<DataSourceVM> Backends { get; set; }
private void StartExport(String filepath)
   {
       try
     {
      DataTable bs = _dataGrid.ItemsSource as DataTable;
      _dataSet = bs.DataSet as DataSet;

   }
   catch (Exception e1)
  {
     MessageBox.Show("error");
  }
}

The ItemSource Contains a baseclass and Backend entity class


Solution

  • You need to create the datatable by hand with the columns you need. I assume that the columns are the properties of DataSourceVM class.

    public ObservableCollection<DataSourceVM> Backends { get; set; }
    
    private void StartExport(String filepath)
    {
        try
        {
            var dataSet = new DataSet();
            var dataTable = new DataTable();
            dataSet.Tables.Add(dataTable);
    
            // we assume that the properties of DataSourceVM are the columns of the table
            // you can also provide the type via the second parameter
            dataTable.Columns.Add("Property1");
            dataTable.Columns.Add("Property2");
    
            foreach (var element in Backends)
            {
                var newRow = dataTable.NewRow();
    
                // fill the properties into the cells
                newRow["Property1"] = element.Property1;
                newRow["Property2"] = element.Property2;
    
                dataTable.Rows.Add(newRow);
            }
    
            // Do excel export
        }
        catch (Exception e1)
        {
            MessageBox.Show("error");
        }
    }