2

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

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

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

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

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

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

一些建议将不胜感激。

谢谢

4

2 回答 2

1

我最终通过修改和使用我在此处找到的 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 来修改我的购物车。

于 2010-03-08T14:21:37.630 回答
0

你如何构建动态列?您是在处理诸如 rowdatabound、rowcreated 之类的事件,还是在渲染注入的 html,例如:

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

ajax 是一种选择吗?

于 2010-03-07T23:51:59.997 回答