C#GridView动态构建的列,文本框ontextchanged

C#GridView动态构建的列,文本框ontextchanged,c#,gridview,textbox,autopostback,C#,Gridview,Textbox,Autopostback,我的页面是一个批量订单,有许多产品和各种尺寸的选择 我有一个gridview,它有3个带标签的静态列。 然后是一些动态构建的列 每个动态构建的列中都有一个文本框。 文本框表示数量 尝试使用每次更改文本框时输入的数量更新服务器(可能是ContextChanged事件),或者逐列循环遍历每行,收集具有数量的所有项目,并一次性处理这些项目及其数量(通过按钮onclick) 如果我将构建GridView的进程放在If(!Page.IsPostBack)后面,那么当textchanged事件触发GridV

我的页面是一个批量订单,有许多产品和各种尺寸的选择

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

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

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

如果我将构建GridView的进程放在If(!Page.IsPostBack)后面,那么当textchanged事件触发GridView时,只会获取静态字段,而动态字段则消失

如果删除If(!Page.IsPostBack),则收集和生成页面的过程对处理来说太繁重,并且再次呈现页面所需的时间太长

如能提供一些建议,将不胜感激


谢谢

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

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


最后,我通过修改并使用我找到的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来修改我的购物车。

我一直在使用完整的回发功能,在使用ajax发送信息方面还没有学到很多东西。。。它在我的清单上:-)我实际上完成了我项目的这一部分。列数是一个变量(基于显示的特定项目的大小选项)。我会把我用过的贴在下面。