做界面的时候在界面上有两个按钮,点击按钮1的时候datagridview显示数据表Table的前面4行,按钮2显示后四行。
在datagridview绑定数据后按钮1设置后4行隐藏,按钮2设置前4行隐藏,来实现上面的功能,但是我单独点击按钮1或者按钮2时显示正常,连续点击按钮1和按钮2时后一个按钮处就会报错(先1后2或先2后1都会报错),我查找原因时发现点击后面那个按钮时dataGridViewX1.Rows.Count为0,我实在找不出原因,麻烦高手指点一下;代码如下:
按钮1和按钮2代码相同就是一个设置不同,代码如下:
                    //绑定数据
                    dataGridViewX1.Columns.Clear();
                    ocn.BindData("ports");
                    dataGridViewX1.DataSource = ocn.db_ds.Tables["ports"];                    //设置全部可见
                    for (int i = 0; i < ocn.db_ds.Tables["ports"].Rows.Count; i++)
                    {
                        dataGridViewX1.Rows[i].Visible = true;
                        //此处报错说:索引超出范围。必须为非负值并小于集合大小。
                    }                    //设置不可见,按钮1时显示DAUID=1的行,按钮2时显示DAUID=2的几行。
                    CurrencyManager cm = (CurrencyManager)BindingContext[dataGridViewX1.DataSource];
                    cm.SuspendBinding();
                    OleDbDataReader odr = ocn.db_cmd.ExecuteReader();
                    int d = 0;
                    while (odr.Read())
                    {
                        if (Convert.ToInt32(odr["DAUID"].ToString()) != 1)
                        {
                            dataGridViewX1.Rows[d].Visible = false;
                        }
                        d++;
                    }
                    cm.ResumeBinding();
                    notSortable();//禁用排序

解决方案 »

  1.   

    dataGridViewX1.DataSource = ocn.db_ds.Tables["ports"];下边调用dataGridViewX1.DataBind() 试下
      

  2.   

    DataGridViewX”并不包含“DataBind”的定义
      

  3.   

    在绑定时搞定吧   点击按钮1时把前4条数据给gridview  点击按钮2时把后四条个gridview就行了 也不用隐藏
      

  4.   

    去掉 dataGridViewX1.Columns.Clear();
    试试
      

  5.   

    程序中还有别的地方用到这个table,所以我是一次性把这个table读到dataset中的,所以才选择这么做~~
      

  6.   

    问题已经解决了,在绑定前加一行数据清空 dataGridViewX1.DataSource = null;就可以了,具体原因我也不清楚,但是问题已经解决了~~