2011-08-08 19 views
10

En aplicación normal WinForm se puede hacer eso:¿Convertir y usar DataTable en WPF DataGrid?

DataTable dataTable = new DataTable(); 
dataTable = dataGridRecords.DataSource; 

pero la forma de hacer eso con la cuadrícula de datos WPF?

dataTable = dataGridRecords.ItemsSource; 

tampoco funcionará.

Respuesta

38

En WPF que no lo hace

DataGrid.ItemsSource = DataTable; 

lugar lo hace

DataGrid.ItemsSource = DataTable.AsDataView(); 

Con el fin de volver DataTable que puede hacer algo como esto

public static DataTable DataViewAsDataTable(DataView dv) 
{ 
    DataTable dt = dv.Table.Clone(); 
    foreach (DataRowView drv in dv) 
     dt.ImportRow(drv.Row); 
    return dt; 
} 

DataView view = (DataView) dataGrid.ItemsSource; 
DataTable table = DataViewAsDataTable(view) 
5

Usted don No es necesario el método DataViewAsDataTable. Sólo hacer lo siguiente:

DataTable dt = ((DataView)dataGrid1.ItemsSource).ToTable();

3

probar este

public static DataTable DataGridtoDataTable(DataGrid dg) 
    { 


     dg.SelectAllCells(); 
     dg.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader; 
     ApplicationCommands.Copy.Execute(null, dg); 
     dg.UnselectAllCells(); 
     String result = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue); 
     string[] Lines = result.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); 
     string[] Fields; 
     Fields = Lines[0].Split(new char[] { ',' }); 
     int Cols = Fields.GetLength(0); 

     DataTable dt = new DataTable(); 
     for (int i = 0; i < Cols; i++) 
      dt.Columns.Add(Fields[i].ToUpper(), typeof(string)); 
     DataRow Row; 
     for (int i = 1; i < Lines.GetLength(0)-1; i++) 
     { 
      Fields = Lines[i].Split(new char[] { ',' }); 
      Row = dt.NewRow(); 
      for (int f = 0; f < Cols; f++) 
      { 
       Row[f] = Fields[f]; 
      } 
      dt.Rows.Add(Row); 
     } 
     return dt; 

    } 
+0

Esto funciona para mi situación ... Gracias ... –

+1

Si usted tiene una coma en cualquier parte de los datos de esta voluntad estropearlo – AndrewBenjamin