DataGridView 索引,添加列

问题1:DataGridView绑定DataTable之后,在界面排序,选择若干行,此时选中的行的index与DataTable中的index不一致,这样若想要对其对应的行进行修改操作,将会造成错误。

Sol: 首先将选中的DataGridView行的DataBoundItem属性转换为DataRowView, 然后通过对应的DataTable中的取出索引。

1 DataRowView drv = dataGridView.SelectedRows[0].DataBoundItem as DataRowView;
2 int index = dataTable.Rows.IndexOf(drv.Row);

这是因为DataRowView对象中,有一个Row属性,获取正被查看的 DataRow,那么就可以在DataRow所在的表中找到它的索引啦。

 

问题2:为什么foreach遍历DataTable或者DataGridView对行进行增删修改的操作,会造成索引错误的问题?

Sol: 这是因为foreach循环是从第一位开始遍历,如果对某一行进行删除操作,那么该行后面的DataRow(DataGridViewRow)的索引会提前一位,也即是说,DataRow(DataGridViewRow)的index是会实时变化的,因此会出错。比如索引为3被删除,那么删除后4的索引就变成3了,又一次循环时原先索引为4的就被跳过不操作了(因为此时操作索引为4的,也即原先索引为5)。

如果需要对行进行删除,那么要从表尾开始操作起,这样删除任一行,对前面的DataRow(DataGridViewRow)的索引就没有影响了。

问题3:DataTable添加列之后,如何确定是否为Null或者空字符串?

Sol: 在作判断的时候经常需要对其判断是否为Null 或者 string.Empty,如果Null和 String.Empty的处理结果是一样的,那么可以在添加列的时候,设置其DefaultValue。

dt.Columns["a"].DefaultValue = string.Empty;

 

posted @   kingsleylam  阅读(1807)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示