有的情况下,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();
(谨以此对自己的工作做个记录和参考,以备以后忘记时候参阅~ 如有错误,欢迎指正,万分感谢~)