日期:2014-05-17 浏览次数:21132 次
昨天客户改需求。具体需求就不说了。总之会用到asp.net GridView动态添加行,列
?
// 由于网上找的,只能添加String值。我想要的是直接渲染出TextBox,所以看了下网上的代码,然后自己写写,琢磨琢磨,最后弄出来了。 ? // 具体代码如下 // 第一步,动态添加标头列 TemplateField field = null; foreach(sys_UserTable u in userList){ field = new TemplateField(); field.HeaderText = u.U_CName; field.FooterText = u.UserID+""; this.gridView1.Columns.Add(field); } ?// 第二部,动态添加行 // 在这里,必须要使用DataTble,用来扩充GridView的行 ?DataTable dt = new DataTable(); for (int row = start; row <= end; row++) { DataRow dRow = dt.NewRow(); for (int column = 0; column < userList.Count; column++) { // 设置表格第一行宽度 (userData.Columns[column] as TemplateField).HeaderStyle.Width = 70; // 使用自定义模板,(我感觉很像swing-JTable的DefaultTableCellRenderer接口 ) (userData.Columns[column] as TemplateField).ItemTemplate = new ColumnTemplate(); } // 添加一行(用来扩充GridView) dt.Rows.Add(dRow); } this.userData.DataSource = dt; this.userData.DataBind();
?
?? 下面就是自定义组件的渲染实现类
?
?
public class ColumnTemplate : ITemplate { // 其实就是实现DefaultTableCellRenderer 的getTableCellRendererComponent方法 public void InstantiateIn(Control container) { TextBox text = new TextBox(); text.ID = "Text"; text.Text = "0"; text.Width = 60; container.Controls.Add(text); } }?
?