WPF中DataGrid转成datatable
在WPF中,可以通过以下步骤将DataGrid转换为DataTable:
-
创建一个空的DataTable对象。
-
遍历DataGrid的列,将每一列的Header作为DataTable的列名,将每一列的数据类型作为DataTable的列类型。
-
遍历DataGrid的每一行,将每一行的数据添加到DataTable中。
下面是一个示例代码:
private DataTable GetDataGridAsDataTable(DataGrid dg)
{
DataTable dt = new DataTable();
// add columns
foreach (DataGridColumn col in dg.Columns)
{
if (col is DataGridTextColumn)
{
var textCol = col as DataGridTextColumn;
dt.Columns.Add(textCol.Header.ToString(), typeof(string));
}
else if (col is DataGridCheckBoxColumn)
{
var checkCol = col as DataGridCheckBoxColumn;
dt.Columns.Add(checkCol.Header.ToString(), typeof(bool));
}
else if (col is DataGridComboBoxColumn)
{
var comboCol = col as DataGridComboBoxColumn;
dt.Columns.Add(comboCol.Header.ToString(), typeof(string));
}
}
// add rows
foreach (var item in dg.Items)
{
DataRow row = dt.NewRow();
foreach (DataGridColumn col in dg.Columns)
{
if (col is DataGridTextColumn)
{
var binding = (col as DataGridTextColumn).Binding as Binding;
row[col.Header.ToString()] = GetPropertyValue(item, binding.Path.Path);
}
else if (col is DataGridCheckBoxColumn)
{
var binding = (col as DataGridCheckBoxColumn).Binding as Binding;
row[col.Header.ToString()] = GetPropertyValue(item, binding.Path.Path);
}
else if (col is DataGridComboBoxColumn)
{
var binding = (col as DataGridComboBoxColumn).SelectedValueBinding as Binding;
row[col.Header.ToString()] = GetPropertyValue(item, binding.Path.Path);
}
}
dt.Rows.Add(row);
}
return dt;
}
private object GetPropertyValue(object obj, string propertyName)
{
PropertyInfo propInfo = obj.GetType().GetProperty(propertyName);
return propInfo.GetValue(obj, null);
}
这个方法将返回一个与DataGrid相对应的DataTable对象。注意,这个方法只支持DataGrid中的文本列、复选框列和下拉框列,如果DataGrid中有其他类型的列,需要相应地修改代码
原文地址: http://www.cveoy.top/t/topic/guR1 著作权归作者所有。请勿转载和采集!