繁体   English   中英

C#GridView动态创建带有文本框的列

[英]C# GridView dynamically built columns with textboxes ontextchanged

我的页面是一个批量订单,其中包含许多产品和各种尺寸选项。

我有一个带有3个带有标签的静态列的gridview。 然后有一些动态构建的列。

每个动态构建的列中都有一个文本框。 文本框用于数量。

尝试使用每次更改文本框时输入的数量更新服务器(可能是ontextchanged事件),或者逐列循环遍历每行,并收集所有具有数量的项目,并一次处理所有这些项目及其数量(通过按钮onclick)。

如果我将构建GridView的过程放在if(!Page.IsPostBack)的后面,则当textchanged事件触发时,gridview仅获得静态字段,而动态字段消失了。

如果我删除了if(!Page.IsPostBack),则收集和构建页面的过程将在处理上过于繁琐,并且花费太长时间才能再次呈现该页面。

一些建议,将不胜感激。

谢谢

我最终通过修改和使用在这里找到的GridViewTemplate.cs动态地构建了列。

由于我的文本框是根据其列名(基于大小选项)来命名的,因此我能够遍历大小选项并使用FindControl获取文本框及其值。

protected void cmdSave_OnClick(object sender, EventArgs e)
{
    ArrayList itemsOrdered = new ArrayList();
    foreach (GridViewRow gvr in gvMainOrderForm.Rows)
    {
        Label lblItemId = (Label)(gvr.FindControl("lblItemId"));
        string itemId = lblItemId.Text;
        foreach (string availableOption in availableOptions)
        {
            TextBox tb = (TextBox)(gvr.FindControl("tb" + availableOption));
            if (tb != null && tb.Text != "")
            {
                ArrayList itemOrdered = new ArrayList();
                itemOrdered.Add(itemId);
                itemOrdered.Add(availableOption);
                itemOrdered.Add(tb.Text);
                itemsOrdered.Add(itemOrdered);
            }
        }
    }
}

如果该值不为空,那么我将构建一个包含产品ID,尺寸选项和数量的小型阵列。

现在,我将能够使用itemsOrdered修改我的购物车。

您如何构建动态列? 您是在处理诸如rowdatabound,rowcreated之类的事件,还是要使用以下方式呈现注入的html:

<asp:Gridview ...>
<Columns>
    <asp:TemplateField ...>    
        <ItemTemplate>   
           <%# GetDynamicHtml(Container.DataItem) %>
        </ItemTemplate>
    </asp:TemplateField
...

可以选择使用ajax吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM