赋值DBNull后DataGridView.SelecteRows 数量减少

.Net技术 码拜 10年前 (2015-01-05) 1658次浏览 0个评论
语句dr["mFilesID"] = DBNull.Value 赋值DBNull .Value后DataGridView.SelecteRows.Count数量减少,如下:
    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;
    }
    /pre>
    mFilesID是数据表的外键。注释掉dr["mFilesID"] = DBNull.Value;这句就没问题了!想请问这到底是什么原因啊?
    还想请教的是,mFilesID为int型,怎么给它赋null值?直接=null程序不能通过。

—- 10分

dr[“Relation”] = DBNull.Value;

—- 5分

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

—-

引用 1 楼 feiyun0112 的回复:

dr[“Relation”] = DBNull.Value;

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

—- 35分

倒着找看看

for (int i = DataGridView.SelecteRows.Count-1; i>=0; i–)

—-

引用 2 楼 duanzi_peng 的回复:

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

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

—-

引用 4 楼 feiyun0112 的回复:

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

谢谢版主热心解答!我目前使用这种方式做的,采用倒叙循环没问题。
大概知道是什么原因了,因为当前表是关系表,数据显示是有字段条件值的。我修改了数据源的字段条件值,依据约束,关系表直接过滤掉了不符合条件的数据,从而导致前台控件数据行的同步减少。

—-

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明赋值DBNull后DataGridView.SelecteRows 数量减少
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!