asp.net - 如何将 .aspx 标记中创建的 TemplateField 添加到代码隐藏中的 GridView 列?

标签 asp.net gridview controls templatefield

基本上,我想要一个按钮,将带有控件(即 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/

相关文章:

c# - 有没有办法自定义 Thinktecture.IdentityServer.v2 登录页面?

c# - 为 GridView 的 PagerTemplate 动态生成页面链接按钮

asp.net - 使用 FindControl 获取内容页中的 GridView

c# - ASP.Net 中的持久动态控件

asp.net - 邮政编码正则表达式验证

asp.net - 拥有多个 IdentityUser 对象

c# - 字符串格式在本地而不是在服务器中工作

forms - 是否可以在不将控件放在 VB6 中的窗体上的情况下使用控件?

VB.NET:SelectedIndexChanged 多次触发

c# - .Net 标准的自定义 System.Web.HttpContext