GridView动态绑定列(据条件显示某些列)
有的情况下,GridView数据源的所有数据并不需要全部显示,会根据条件部分的显示,或者是动态的添加删减某些列。
这种情况下,可以先把数据源所有的数据抽取出来,存放在一个DataTable中。
DataTable dt=new DataTable();
GridView1.AutoGenerateColumns=false;//只有添加了这个之后,才不会显示出所有的列
GridView1.DataSource=dt; //这句很重要,需要特别注意。如果没有指定数据源,GridView中无法显示出数据
GridView1.Columns.Clear();//如果没有这个方法,GridVIew1的数据列就会一直增加。所以注意每次增加数据源之后,先把之前的列清除
得到整个数据源后,在按照条件动态绑定所需要的列。可添加的列同GridView一样,有模板列,命令列,按钮列,数据列。。。
CommandField 列:
//add an edit column for grdReport1 CommandField cf = new CommandField(); cf.ButtonType = ButtonType.Link; cf.ShowEditButton = true; cf.CausesValidation = false; cf.HeaderText = "Edit"; cf.ItemStyle.HorizontalAlign = HorizontalAlign.Center; //居中对齐 grdReport1.Columns.Add(cf); //GridView添加命令列
GridView1.DataBind();
BoundField 列:(这是最基本的绑定,可以对新添加的列设置格式,对齐方式,文本颜色等等)
//遍历dt中的所有列,或者根据条件选择 for (int i = 0; i < dt.Columns.Count; i++) { BoundField bfCase = new BoundField(); bfCase.DataField = dt.Columns[i].ToString(); bfCase.HeaderText = dt.Columns[i].ToString(); grdReport1.Columns.Add(bfCase); }
GridView1.DataBind();
Template 列:(待验证……)
//添加模板列 TemplateField tf= new TemplateField (); tf.ItemTemplate=new MyTemplate("",DataControlRowType.DataRow); bfCase.HeaderText = ""; //你想在模板列中显示的 tf.HeaderTemplate=new MyTemplate("",DataControlRowType.Header); tf.ItemStyle.HorizontalAlign = HorizontalAlign.Center; //居中对齐 grdReport1.Columns.Add(tf); GridView1.DataBind();
在这些都完成之后,要记得添加一句:GridView1.DataBind();
(谨以此对自己的工作做个记录和参考,以备以后忘记时候参阅~ 如有错误,欢迎指正,万分感谢~)
Be the change you want to see in the world.