如何使DataGrid验证能够接受WPF中的空单元格?

本文关键字:WPF 单元格 DataGrid 何使 验证 | 更新日期: 2023-09-27 18:06:03

我已经制作了一个DataGrid,它绑定到由SqlDataAdapter填充的DataTable,因此我的DataGrid在用户编辑DataGrid时进行类型检查。这很好,因为它可以确保向数据库提交正确的类型。但是,当我尝试将单元格编辑为空单元格时,我认为这是null,验证不会让我更改行,因此我无法将更改提交到数据库。但是,当我添加新行时,只要在数据库中为空的列是可空的,我就可以毫无问题地添加该行。

我无法定义DataGrid中的列,因为它应该显示不同的表,并且在获取它们之前没有办法知道表的结构。

DataGrid:

<DataGrid x:Name="dataGrid_Table" HeadersVisibility="Column" CanUserAddRows="true" RowEditEnding="dataGrid_Table_RowEditEnding"/>

填充数据表和数据网格的方法

internal DataTable FillDataGridFromSelectedTable(User user, MainWindow mainWindow)
    {
        dt = new DataTable();
        using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                con.Open();
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM " + Name, con))
                {
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);
                    sda.Fill(dt);
                    mainWindow.dataGrid_Table.ItemsSource = dt.DefaultView;
                }
            }
   }

如果有办法解决这个问题?

提前感谢一堆。

如何使DataGrid验证能够接受WPF中的空单元格?

为将来参考,如果有人需要答案,我得到它使用

工作
private void dataGrid_Table_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            // Make all columns nullable
            ((DataGridBoundColumn)e.Column).Binding.TargetNullValue = "NULL";
        }

现在我有一个问题,当我想添加一个新的行,默认值显示当我进入编辑模式,我希望这些值是空字符串。由于一些列可能是int类型,我将尝试找出另一种解决方法,并在完成后编辑我的帖子。

编辑:

通过添加InitializingNewItem事件修复。尽管结果不完全像我想的那样,但这是我能找到的唯一可行的方法。

private void dataGrid_Table_InitializingNewItem(object sender, InitializingNewItemEventArgs e)
    {
        DataRowView drv = (DataRowView)e.NewItem;
        for (int i = 0; i < drv.Row.ItemArray.Count(); i++)
        {
            DataColumn col = drv.Row.Table.Columns[i];
            if (col.DataType.ToString() == "System.String")
            {
                drv.Row[i] = "";
            }
            else if (col.DataType.ToString() == "System.Int32")
            {
                drv.Row[i] = 0;
            }
        }
    }

String单元格为空,int单元格为0,对于设计是可以工作的