基本上,我想要一个按钮,将带有控件(即 TextBox、DropDownList)的新列添加到我的 GridView。
看起来已经很简单了:
protected void btn_AddColumn_Click(object sender, EventArgs e)
{
TemplateField MyTemplateField = new TemplateField();
gv_SupplierPrices.Columns.Add(MyTemplateField);
}
假设我想添加此标记:
<asp:TemplateField>
<ItemTemplate>
<table style="width:100%;">
<tr>
<td><asp:TextBox ID="tbox_ItemPrice" runat="server"></asp:TextBox></td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
问题就在这里。如何使用我在 .aspx 页面上的标记中创建的 TemplateField 并将其添加到代码隐藏的新列中?我不知道也不想在后面的代码上创建 TemplateField,因为我将无法创建复杂或奇特的标记。它们看起来就像彼此相邻的控件。太丑了。
附注如果有人对我实际上在做什么感到好奇,我基本上将我的 GridView 变成了类似 Excel 的网格表。新列代表供应商,每行代表供应商正在销售的商品。他们希望这样,因为在填满 cargo 时更容易并排比较价格。
更新:我已经弄清楚了。我可以简单地从代码隐藏中调用 GridView 的列,该列代表我在标记中创建的 TemplateField,然后添加它。
<asp:GridView ID="gv_SupplierTable" runat="server" AutoGenerateColumns="False"
DataKeyNames="Id" DataSourceID="TestTable_DS">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False"
ReadOnly="True" SortExpression="Id" />
<asp:BoundField DataField="AccountType" HeaderText="AccountType"
SortExpression="AccountType" />
<asp:TemplateField AccessibleHeaderText="MyTemplateFieldCreated in Markup">
<ItemTemplate>
<table style="width:100%;">
<tr>
<td><asp:TextBox ID="tbox_ItemPrice" runat="server"></asp:TextBox></td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
然后在代码隐藏中,我可以访问表示在标记中创建的 TemplateField 的列,并在单击按钮时再次添加它,就像新副本一样:
protected void btn_AddColumn_Click(object sender, EventArgs e)
{
DataControlField newColumn = this.gv_SupplierTable.Columns[2];
//this column at index #2 from my GridView represents
the TemplateField created in markup since the columns
at index #0 and index #1 are DataBound.
gv_SupplierTable.Columns.Add(newColumn);
}
最佳答案
您可以切换每列的可见性。
gv_SupplierPrices.Columns[10].Visible = true;
关于asp.net - 如何将 .aspx 标记中创建的 TemplateField 添加到代码隐藏中的 GridView 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12675556/