用dropdownlist控制gridview某个单元格的显示与否

来源:互联网 发布:js随机生成字母和数字 编辑:程序博客网 时间:2024/06/04 20:00

今天在做一个页面时,用dropdownlist选择用户类别(管理员与会员两种),当选择管理员时要显示的字段有:用户名,真实姓名,Email,所属角色,编辑,删除,当选择会员时只显示用户名,真实姓名,Email,这两者用的是一个gridview,并且管理员与会员数据是由一个存储过程取出来用一个flag字段标示的,这时存在一个问题,但选择会员时要使gridview中的“所属角色”“编辑”“删除”不可见,但是当选择管理员时又可见,我最开始是把控制单元格可见性的语句放在dropdownlistselectedindexchanged事件中的如下位置:

            if (DropDownList1.SelectedIndex == 1)

            {

                dv.RowFilter = "flag=" + 1;

                GridView1.Columns[3].Visible = true;

                GridView1.Columns[4].Visible = true;

                GridView1.Columns[5].Visible = true;

                //GridView1.EditIndex = -1;

                GridView1.DataSource = dv;

                DataBind();

            }

            else if(DropDownList1 .SelectedIndex ==2)

            {

                dv.RowFilter = "flag=" + 2 ;               

                GridView1.Columns[3].Visible = false;

                GridView1.Columns[4].Visible = false;

                GridView1.Columns[5].Visible = false;

                //GridView1.EditIndex = -1;

                GridView1.DataSource = dv;

                DataBind();

            }

但是运行时,发现有问题,当选择管理员时数据显示正确,再选择会员时数据显示也正确,但是当再选择管理员时就有问题了,编辑,删除都可用,但是“所属角色”一栏却显示的是“所属角色”,说明未对该列进行绑定,但是当单击编辑时,所属角色又显示的是准确数据,再单击取消时也是正确数据!试了几次依旧是这样的,看了半天也没看出来问题在哪里,如果说是未对该列进行绑定那第一次选择管理员时为何能正确读取数据呢,但是选择会员再回到管理员时,又显示的是“所属角色”,似乎说明未绑定数据,问题到底在哪里呢?后来仔细想了一下,试着把这几句话的位置换了个位置,结果问题解决!

                GridView1.Columns[3].Visible = true;

                GridView1.Columns[4].Visible = true;

                GridView1.Columns[5].Visible = true;

,换了之后的代码如下:

            DataView dv = dt.DefaultView;               

            GridView1.Columns[3].Visible = true;

            GridView1.Columns[4].Visible = true;

            GridView1.Columns[5].Visible = true;

            if (DropDownList1.SelectedIndex == 1)

            {

                dv.RowFilter = "flag=" + 1;

                //GridView1.EditIndex = -1;

                GridView1.DataSource = dv;

                DataBind();

            }

            else if(DropDownList1 .SelectedIndex ==2)

            {

                dv.RowFilter = "flag=" + 2 ;               

                GridView1.Columns[3].Visible = false;

                GridView1.Columns[4].Visible = false;

                GridView1.Columns[5].Visible = false;

                //GridView1.EditIndex = -1;

                GridView1.DataSource = dv;

                DataBind();

            }

想了一下,这样改似乎有一定的道理:第4.5.6列只有在选择了会员时不需要显示,其他时候都是可见的,只需把控制它们不可见的语句放在选择了会员的条件中!

原创粉丝点击