有的情况下,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();
常用操作:
//单击一个单元格选中单元格所在行
this.dataGridView1.Rows[this.dataGridView1.SelectedCells[0].RowIndex].Selected = true;
//如果选中某行
if (dataGridView1.SelectedRows.Count != 0)
//单击一个单元格选中单元格所在行,获取其第一列数据
int id = Int32.Parse(dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[0].Value.ToString());