我已经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;
}
}
}
如果有办法解决这个问题?
提前感谢一大堆。
答案 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,设计正常。