我想将所有datagrid记录复制到datatable中而不使用任何循环。 对于防爆:如何将DataGrid转换为dataTable
Dim dt as New DataTable
dt = Datagrid1.Items
但这不是工作,并给了一个错误消息。
我的开发平台是Visual Studio 2010和语言是WPF与vb.net 4.0
我想将所有datagrid记录复制到datatable中而不使用任何循环。 对于防爆:如何将DataGrid转换为dataTable
Dim dt as New DataTable
dt = Datagrid1.Items
但这不是工作,并给了一个错误消息。
我的开发平台是Visual Studio 2010和语言是WPF与vb.net 4.0
这是所有记录从DATAGRID转移到DATATABLE不使用LOOP的方式。
VB:
Dim dt As New DataTable
dt = CType(DataGrid1.ItemsSource, DataView).ToTable
C#:
DataTable dt = new DataTable();
dt = ((DataView)DataGrid1.ItemsSource).ToTable();
这取决于数据网格的填充方式。如果DataContext属性设置为DataTable,那么您可以简单地检索该值并将其转换为DataTable。
没有直接的方法将它从DataGrid元素转换为DataTable。
如果您想手动执行此操作,您必须创建DataTable的实例,然后使用循环从DataGrid中的Items中创建行。
您必须在DataGrid上循环并将项目添加到Datatable。以下链接可能会有帮助
我只是测试这一点,这个工程
Dim dt as New DataTable
dt = ctype(Datagrid1.Datasource, DataTable)
为您的数据网格转换成蒙山头行的数据表,你可以按照这个步骤:
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)通过全项修改并通过内容达达表“细胞”
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;
我得到了这个工作很好,但我不得不添加我自己的GetVisualChild和GetRow方法,因为它们不在这里发布。 – AndrewBenjamin
抱歉忘记了,但正如您看到的,您可以轻松创建自己的方法来检索行和GetVisulaChild。 让我知道如果你想要我也发布这种方法 – luka
我m没有在C#datagrid上找到“ItemSource” –
非常感谢 – Sonja