在WPF中,可以通过以下步骤将DataGrid转换为DataTable:

  1. 创建一个空的DataTable对象。

  2. 遍历DataGrid的列,将每一列的Header作为DataTable的列名,将每一列的数据类型作为DataTable的列类型。

  3. 遍历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中有其他类型的列,需要相应地修改代码

WPF中DataGrid转成datatable

原文地址: http://www.cveoy.top/t/topic/guR1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录