65.9K
CodeProject 正在变化。 阅读更多。
Home

动态创建 DataGrid 中的模板列

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.60/5 (17投票s)

2006年3月8日

1分钟阅读

viewsIcon

122650

downloadIcon

1614

本文介绍如何使用模板类动态创建具有绑定列的模板列。

Sample Image - DynamicTemplateColumnExample.jpg

引言

本文档介绍了如何动态创建模板列。我遇到了一种情况,需要从数据库显示一些列值,并动态显示一些模板(复选框)列。

我创建了一个示例模板类,该类在项目中是必需的。首先,根据您的需求修改模板类。这里我给出了一个复选框作为模板列的示例。

在您的项目中实现代码的步骤

1) 将 DataGrid 的 AutoGenerateColumns 属性设置为 false。

2) 绑定静态列的示例

<asp:DataGrid id="ItemsGrid" runat="server" OnItemCommand="Grid_CartCommand" AutoGenerateColumns="False"
CellPadding="3" BorderWidth="1px" BorderColor="Black">
<HeaderStyle BackColor="#C0C0FF"></HeaderStyle>
<Columns>
<asp:ButtonColumn Text="Add" ButtonType="PushButton" HeaderText="Add to cart" CommandName="AddToCart"></asp:ButtonColumn>
<asp:ButtonColumn Text="Remove" ButtonType="PushButton" HeaderText="Remove from cart" CommandName="RemoveFromCart"></asp:ButtonColumn>
<asp:BoundColumn DataField="StringValue" HeaderText="Item"></asp:BoundColumn>
<asp:BoundColumn DataField="CurrencyValue" HeaderText="Price" DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="Right"></ItemStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>

3) 在 Page_load 中添加以下代码

if (!IsPostBack)
{
// 此数据仅加载一次。
ItemsGrid.DataSource= CreateDataSource(); // 函数用于创建动态列
ItemsGrid.DataBind();
}

<headERSTYLE BackColor="#C0C0FF"></headERSTYLE><asp:ButtonColumn CommandName="AddToCart" HeaderText="Add to cart" ButtonType="PushButton" Text="Add"></asp:ButtonColumn><asp:ButtonColumn CommandName="RemoveFromCart" HeaderText="Remove from cart" ButtonType="PushButton" Text="Remove"></asp:ButtonColumn><asp:BoundColumn HeaderText="Item" DataField="StringValue"></asp:BoundColumn><asp:BoundColumn HeaderText="Price" DataField="CurrencyValue" DataFormatString="{0:c}">

4) 在 OnInit() 中添加以下代码 protected void OnInit(EventArgs e)// // CODEGEN: 此调用由 ASP.NET Web Form Designer 要求。 //

CreateDataGridColumn();

InitializeComponent();

}

base.OnInit(e);

//-----------------------------------------------------------------------------

public

{

override

{

void CreateDataGridColumn()// 创建动态列并添加到 Columns 集合中。//-----------------------------------------------------------------------------

TemplateColumn tc1 =

//-----使用的类名为 DataGridTempla.cs------

tc1.HeaderTemplate =

tc1.ItemTemplate =

tc1.EditItemTemplate =

tc1.FooterTemplate =

ItemsGrid.Columns.Add(tc1);

new TemplateColumn();new DataGridTempla(ListItemType.Header, "Select1");new DataGridTempla(ListItemType.Item, "Select1");new DataGridTempla(ListItemType.EditItem, "");new DataGridTempla(ListItemType.Footer, "");//-----------------------------------------------------------------------------

TemplateColumn tc2=

tc2.HeaderTemplate=

tc2.ItemTemplate=

ItemsGrid.Columns.Add(tc2);

new TemplateColumn();new DataGridTempla(ListItemType.Header,"Select2");new DataGridTempla(ListItemType.Item,"Select2");//-----------------------------------------------------------------------------

BoundColumn NumberColumn =

NumberColumn.HeaderText="Item Number";

NumberColumn.DataField="IntegerValue";

new BoundColumn();// 将列添加到 Columns 集合中。

ItemsGrid.Columns.AddAt(2, NumberColumn);

}

</asp:BoundColumn>

//-----------------------------------------------------------------------------

© . All rights reserved.