要在GridView中动态添加列,可以使用以下步骤:
- 在GridView控件中定义模板列。
- 在代码中动态添加TemplateField并将其添加到GridView中。
以下是一个示例代码:
// 创建一个新的TemplateField TemplateField templateField = new TemplateField(); templateField.HeaderTemplate = new GridViewTemplate(ListItemType.Header, "New Column Header"); templateField.ItemTemplate = new GridViewTemplate(ListItemType.Item, "ItemTemplate"); templateField.EditItemTemplate = new GridViewTemplate(ListItemType.EditItem, "EditItemTemplate"); // 将TemplateField添加到GridView中 GridView1.Columns.Add(templateField);
在上面的示例中,GridViewTemplate是自定义的一个类,用来定义列的模板。在GridViewTemplate类中,需要实现InstantiateIn方法来定义模板列的内容。
public class GridViewTemplate : ITemplate
{
private ListItemType _type;
private string _columnName;
public GridViewTemplate(ListItemType type, string colname)
{
_type = type;
_columnName = colname;
}
public void InstantiateIn(Control container)
{
switch (_type)
{
case ListItemType.Header:
Literal headerLiteral = new Literal();
headerLiteral.Text = "" + _columnName + "";
container.Controls.Add(headerLiteral);
break;
case ListItemType.Item:
Literal itemLiteral = new Literal();
itemLiteral.DataBinding += new EventHandler(itemLiteral_DataBinding);
container.Controls.Add(itemLiteral);
break;
case ListItemType.EditItem:
TextBox txtEdit = new TextBox();
txtEdit.ID = "txtEdit" + _columnName;
container.Controls.Add(txtEdit);
break;
}
}
private void itemLiteral_DataBinding(object sender, EventArgs e)
{
Literal itemLiteral = (Literal)sender;
GridViewRow container = (GridViewRow)itemLiteral.NamingContainer;
itemLiteral.Text = DataBinder.Eval(container.DataItem, _columnName).ToString();
}
}
通过以上步骤,就可以在GridView中动态添加一个列,并定义其内容及样式。