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

时间:2016-09-06 10:14:45

标签: c# wpf datagrid

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

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

数据网格:

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

填充DataTable和DataGrid的方法

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;
                }
            }
   }

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

提前感谢一大堆。

1 个答案:

答案 0 :(得分:0)

如果有人需要答案,以备将来参考,我使用

开始工作
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,设计正常。