GridView动态生成列名


动态生成列名

 1 if (dt.Rows.Count > 0)
 2 {
 3     for (int n = 0; n < dt.Columns.Count; n++)
 4     {
 5         //申明一个绑定字段对象
 6         BoundField bf = new BoundField();
 7         bf.DataField = dt.Columns[n].ColumnName.ToString();
 8         bf.HeaderText = dt.Columns[n].Caption.ToString();
 9         grdResult.Columns.Add(bf);
10     }
11     grdResult.DataSource = dt;
12     grdResult.DataBind();
13 }

联想到了:

1 "BillID" HeaderText="单号"/>

GridView里的Columns方法:

 1 //
 2 // 摘要: 
 3 //     获取表示 System.Web.UI.WebControls.GridView 控件中列字段的 System.Web.UI.WebControls.DataControlField
 4 //     对象的集合。
 5 //
 6 // 返回结果: 
 7 //     一个 System.Web.UI.WebControls.DataControlFieldCollection,包含 System.Web.UI.WebControls.GridView
 8 //     控件中所有列字段。
 9 [DefaultValue("")]
10 [Editor("System.Web.UI.Design.WebControls.DataControlFieldTypeEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
11 [MergableProperty(false)]
12 [PersistenceMode(PersistenceMode.InnerProperty)]
13 public virtual DataControlFieldCollection Columns { get; }

查看元数据 DataControlFieldCollection 就会发现,这个类继承自 StateManagedCollection,而StateManagedCollection又继承自IList.

注意点

  1. 标签里面需要添加标签.
  2. GridView内的属性AutoGenerateColumns="false",如果等于true的话,也可以实现自动生成列名,但是如果是回传的时候,则不会再次刷新列,只有页面初次加载时才会动态的生成列.
  3. GridView标签内添加的属性,都能在.aspx.cs页面添加.编译的时候,GridView会生成一个对象,所有的属性会变成对象的属性,特别是数据行,会生成一个GridViewRow的对象集合,然后赋值给GridView的对象的Rows属性.