日期:2014-05-17  浏览次数:20841 次

关于上午的一个C#问题的总结!你肯定学到东西!(涉及两个关于DataGridView控件的关键点!)重要关键)
本帖最后由 hufanrong123 于 2013-08-20 17:37:03 编辑
上午的帖子的地址!
http://bbs.csdn.net/topics/390555941?page=1#post-395348412
原帖中的代码是这样的:
int k,m;
            for(k=0;k<dataGridView.RowCount;++k)
            {
                for (m = 1; m<dataGridView.RowCount;++m )
                {
                    if ((m>k)&&(dataGridView.Rows[k].Cells["keyword"].Value == dataGridView.Rows[m].Cells["keyword"].Value))
                    {
                        dataGridView.Rows[m].Cells["keyword"].Value = null;
                    }
                }
            }

结合各位网友的回答之后修改之后的代码:
for(int k=0;k<dataGridView.RowCount;++k)
            {
                for (int m = k+1;m<dataGridView.RowCount&&dataGridView.Rows[m].Cells[1].Value!=null;++m )
                {
                    if (dataGridView.Rows[k].Cells[1].Value.ToString()== dataGridView.Rows[m].Cells[1].Value.ToString())
                    { dataGridView.Rows[m].Cells[1].Value = ""; }
                }
            }

哈哈,貌似比原来的代码还短了!
下面就来简单分析一下:
1.(最重要)关键点①:详见@hsy_2011这位网友的回答。归纳起来就是datagridview控件的单元格是个Object的类型,所以得到的值虽然是一样,但是没法相等无法做“==”运算。所以就会出现点击之后程序不报错,也没有反映的问题!解决方法就是转换为其他类型进行比较!比如string类型!
2.(最重要)关键点②:这个关键点@hsy_2011这位网友在回复中其实也说过,我只是忽略了,但是@jb357575308这位网友提醒了我。主要问题就是datagridview的值不能赋值为null!比如你这样写“dataGridView.Rows[m].Cells[1].Value = null;”,程序就会报错“未将对象引用设置到对象的实例”(至少在我的程序里面)。所以@hsy_2011这位网友让我做一个“判断一个dataGridView.Rows[m].Cells[1].Value是否为null”的检查,这个其实之前我有写,主要是想减少遍历次数。但为了减少代码的长度,方便大家查找问题就没写。总结起来就是