赋值DBNull.Value会导致DataGridView.SelecteRows.Count数量减少

时间:2022-04-16 13:24:03

for (int i = 0; i < DataGridView.SelecteRows.Count; i++)
{
string mid = DataGridView.SelectedRows[i].Cells["mID"].Value.ToString();

DataRow dr = DataTable.Rows.Find(mid);
dr["Relation"] = null;
dr["mFilesNo"] = null;
dr["mFilesID"] = DBNull.Value;
}

mFilesID是数据表的外键。注释掉dr["mFilesID"] = DBNull.Value;这句就没问了!想请问这到底是什么原因啊?
还想请教的是,mFilesID为int型,怎么给它赋null值?直接=null程序不能通过。

7 个解决方案

#1


dr["Relation"] = DBNull.Value;

#2


dr["mFilesID"]   列类型是int的  应该不支持 可空类型(int?)的。  给它改成0,在显示的时候判断如果等于0 就显示为空。

#3


引用 1 楼 feiyun0112 的回复:
dr["Relation"] = DBNull.Value;

这个可以设置,但是会导致DataGridView.SelecteRows.Count数量减少,循环出现异常!

#4


倒着找看看
for (int i = DataGridView.SelecteRows.Count-1; i>=0; i--)

#5


引用 2 楼 duanzi_peng 的回复:
dr["mFilesID"]   列类型是int的  应该不支持 可空类型(int?)的。  给它改成0,在显示的时候判断如果等于0 就显示为空。

这个问题倒是不难解决,目前我是用倒序循环做的!就是感觉有点奇怪,为什么mFilesID一旦赋值,就会减少SelecteRows.Count的数量!

#6


引用 4 楼 feiyun0112 的回复:
倒着找看看
for (int i = DataGridView.SelecteRows.Count-1; i>=0; i--)
谢谢版主热心解答!我目前使用这种方式做的,采用倒叙循环没问题。
大概知道是什么原因了,因为当前表是关系表,数据显示是有字段条件值的。我修改了数据源的字段条件值,依据约束,关系表直接过滤掉了不符合条件的数据,从而导致前台控件数据行的同步减少。

#7


顺便说一下,在datatable中int型字段赋值NULl,就是dr["Relation"] = DBNull.Value,是可以正确保存到数据库的。我出现的问题主要就是因为控件绑定的是关系表而不是实体表。

#1


dr["Relation"] = DBNull.Value;

#2


dr["mFilesID"]   列类型是int的  应该不支持 可空类型(int?)的。  给它改成0,在显示的时候判断如果等于0 就显示为空。

#3


引用 1 楼 feiyun0112 的回复:
dr["Relation"] = DBNull.Value;

这个可以设置,但是会导致DataGridView.SelecteRows.Count数量减少,循环出现异常!

#4


倒着找看看
for (int i = DataGridView.SelecteRows.Count-1; i>=0; i--)

#5


引用 2 楼 duanzi_peng 的回复:
dr["mFilesID"]   列类型是int的  应该不支持 可空类型(int?)的。  给它改成0,在显示的时候判断如果等于0 就显示为空。

这个问题倒是不难解决,目前我是用倒序循环做的!就是感觉有点奇怪,为什么mFilesID一旦赋值,就会减少SelecteRows.Count的数量!

#6


引用 4 楼 feiyun0112 的回复:
倒着找看看
for (int i = DataGridView.SelecteRows.Count-1; i>=0; i--)
谢谢版主热心解答!我目前使用这种方式做的,采用倒叙循环没问题。
大概知道是什么原因了,因为当前表是关系表,数据显示是有字段条件值的。我修改了数据源的字段条件值,依据约束,关系表直接过滤掉了不符合条件的数据,从而导致前台控件数据行的同步减少。

#7


顺便说一下,在datatable中int型字段赋值NULl,就是dr["Relation"] = DBNull.Value,是可以正确保存到数据库的。我出现的问题主要就是因为控件绑定的是关系表而不是实体表。