datagridview绑定数据之后,行数依然为0的困惑~

时间:2022-12-16 14:45:41
做界面的时候在界面上有两个按钮,点击按钮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();//禁用排序

7 个解决方案

#1


dataGridViewX1.DataSource = ocn.db_ds.Tables["ports"];

下边调用dataGridViewX1.DataBind() 试下

#2


引用 1 楼 windhuan 的回复:
dataGridViewX1.DataSource = ocn.db_ds.Tables["ports"];

下边调用dataGridViewX1.DataBind() 试下

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

#3


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

#4


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

#5


引用 3 楼 zhongweng 的回复:
在绑定时搞定吧   点击按钮1时把前4条数据给gridview  点击按钮2时把后四条个gridview就行了 也不用隐藏

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

#6


引用 4 楼 jcrensheng 的回复:
去掉 dataGridViewX1.Columns.Clear();
试试


这个不行,我试过了的~~

#7


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

#1


dataGridViewX1.DataSource = ocn.db_ds.Tables["ports"];

下边调用dataGridViewX1.DataBind() 试下

#2


引用 1 楼 windhuan 的回复:
dataGridViewX1.DataSource = ocn.db_ds.Tables["ports"];

下边调用dataGridViewX1.DataBind() 试下

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

#3


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

#4


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

#5


引用 3 楼 zhongweng 的回复:
在绑定时搞定吧   点击按钮1时把前4条数据给gridview  点击按钮2时把后四条个gridview就行了 也不用隐藏

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

#6


引用 4 楼 jcrensheng 的回复:
去掉 dataGridViewX1.Columns.Clear();
试试


这个不行,我试过了的~~

#7


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