zoukankan      html  css  js  c++  java
  • 关于DataGridView的索引

    最近在做一个课堂练习是被郁闷了一把。现成的事成了想当然的事。案例如下。

    是一个WinForm程序,在DataGridView绑定控件后,选择一行,进行操作,代码如下:

    数据绑定代码:

    SqlDataAdapter da = new SqlDataAdapter("select id from shuji","server=.;database=tushudb;uid=sa;pwd=sa;");

                DataTable dt = new DataTable();

                da.Fill(dt);

                My_DGV.DataSource = dt;

    这是选择一行后的操作

    label1 .Text =   My_DGV.Rows[e.RowIndex].Cells[0].Value.ToString();

    对于DataGridView来说,有两个例,代码如下:  

                // Column1         

                this.Column1.DataPropertyName = "id";

                this.Column1.HeaderText = "ID";

                this.Column1.Name = "Column1";           

                // Column2

                this.Column2.DataPropertyName = "ISBN";

                this.Column2.HeaderText = "ISBN";

                this.Column2.Name = "Column2";

    上面的两行,我是先添加Column2,后添加Conlumn1的,然后把name属性换掉的。

    如果数据库中有数据,运行后,在DataGridView中就会有数据记录:

    当我们选一行时,会报一个“未将对象引用设置到对象的实例”。当出现这个问题,我很是纳闷,因为我查询出一行,并且已经在ID这列中显示出来了,当我取这某一行的列索引为0时,出问题了,没有实例,也就是为null。不应该呀,于是就找根源。

    先看局部变量窗口中的My_DGV对象,数据都在这个对象的Rows集合下,并且在非公共成员List集合中,这个集合存着所有Grid的行,在这个集合中的某个元素中,有一个Cells的属性,这个属性是这一行所有列的集合,展开这个属性的List属性,因为我们取的是第0列索引,所以展开下标为0的,再展开base,其中有一个value值,不难看到,这个值是null,也就是这列上没有值,为什么呢?如果仔细看,有一个OwningColum的属性,这个属性中明确的看到,Name=Column2Index=0,也就是告诉我们,即使是我们改了每个列的name属性,但一开始我们在DataGridViewColumns集合中添加列的顺序是没有变的,即在集合中的位置是不变的。所以上图中的ID列,是和ISBN列换了一下位置的,所以在找下标为0的列是,其实找的是ISBN,是没有数据的。所以最好不要用下标来取值。

    当然,我们可以取行某列时,改成如下

    label1 .Text =   My_DGV.Rows[e.RowIndex].Cells["Column1"].Value.ToString();

    这样就会显示的告我们选的是那一行的数据。

    ****欢迎关注我的asp.net core系统课程****
    《asp.net core精要讲解》 https://ke.qq.com/course/265696
    《asp.net core 3.0》 https://ke.qq.com/course/437517
    《asp.net core项目实战》 https://ke.qq.com/course/291868
    《基于.net core微服务》 https://ke.qq.com/course/299524
  • 相关阅读:
    解决-webkit-box-orient: vertical;(文本溢出)属性在webpack打包后无法编译的问题
    消息框尖尖
    表单提交
    昨天看了一个大神的fix类,清晰了然
    使用cross-env解决跨平台设置NODE_ENV的问题
    axios 在Vue全局引入的方法
    vue自定义指令
    AMD/CMD/CommonJs到底是什么?它们有什么区别?
    artDialog.js的使用
    delegate-使用笔记
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/1699301.html
Copyright © 2011-2022 走看看