如何将DataGrid转换为dataTable

时间:2014-02-17 11:04:51

标签: wpf vb.net wpfdatagrid wpf-4.0

我想在不使用任何循环的情况下将所有datagrid记录复制到datatable中。 对于Ex:

Dim dt as New DataTable
dt = Datagrid1.Items

但这不是正常工作并给出错误信息。

我的开发平台是Visual Studio 2010,语言是WPF with vb.net 4.0

5 个答案:

答案 0 :(得分:16)

这是在不使用LOOP的情况下将所有记录从DATAGRID传输到DATATABLE的方法。

<强> VB:

Dim dt As New DataTable
dt = CType(DataGrid1.ItemsSource, DataView).ToTable

<强> C#:

DataTable dt = new DataTable();
dt = ((DataView)DataGrid1.ItemsSource).ToTable();  

答案 1 :(得分:5)

这取决于数据网格的填充方式。如果DataContext属性设置为DataTable,那么您只需检索此值并转换为DataTable。

没有直接的方法可以将其从DataGrid元素转换为DataTable。

如果您想手动执行此操作,则必须创建DataTable的实例,然后使用循环从DataGrid中的Items创建行。

答案 2 :(得分:1)

要将dataGrid转换为带标题行的数据表,您可以按照以下步骤操作:

1)创建反转单元格的方法

  static public DataGridCell GetCell(DataGrid dg, int row, int column)
    {
        DataGridRow rowContainer = GetRow(dg, row);

        if (rowContainer != null)
        {
            DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
            DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
            if (cell == null)
            {
                dg.ScrollIntoView(rowContainer, dg.Columns[column]);
                cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
            }
            return cell;
        }
        return null;
    }

2)迭代所有项目并将内容传递给dada table&#34; cell&#34;

    private void DataGridToDataTable()
    {
        DataTable dt = new DataTable();
        var j = byte.MinValue;//header row handler
        dt.Rows.Add();
        foreach (DataGridColumn column in dataGrid1.Columns)
        {                
            dt.Columns.Add(column.GetValue(NameProperty).ToString());
            dt.Rows[byte.MinValue][j++] = column.Header;
        }

        //data rows handler
        for (int i = byte.MinValue ; i < dataGrid1.Items.Count; i++)
        {
            dt.Rows.Add();
            for (j = Byte.MinValue; j < dataGrid1.Columns.Count; j++)
            {
                DataGridCell dgc = GetCell(dataGrid1, i, j);
                dt.Rows[i + 1][j] =  ((dgc.Content) as TextBlock).Text;
            }
        }
    }  

请记住使用此方法,您必须使用以下方法引用此方法:

using System.Windows.Media;
using System.Data;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;

答案 3 :(得分:0)

我刚刚测试了这个并且这个工作

Dim dt as New DataTable
dt = ctype(Datagrid1.Datasource, DataTable)

答案 4 :(得分:-1)

您必须在DataGrid上循环并将项目添加到Datatable。以下链接可能有所帮助。

DataGridView selected rows to DataTable