如何使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;
}
}
}
如果有办法解决这个问题?
提前感谢一堆。
为将来参考,如果有人需要答案,我得到它使用
工作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,对于设计是可以工作的