C#GridView在textchanged上动态构建带有文本框的列

时间:2010-03-05 20:28:38

标签: c# gridview textbox autopostback

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

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

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

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

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

如果我删除了if(!Page.IsPostBack),那么收集和构建页面的过程在处理上太重,并且需要很长时间才能再次呈现页面。

一些建议将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

我最终通过修改和使用我发现here的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来修改我的购物车了。

答案 1 :(得分:0)

如何构建动态列?你正在处理诸如rowdatabound,rowcreated之类的事件,或者你用以下内容呈现注入的html:

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

ajax是一个选项吗?