【问题标题】:C# GridView dynamically built columns with textboxes ontextchangedC# GridView 动态构建带有文本框 ontextchanged 的​​列
【发布时间】:2010-03-05 20:28:38
【问题描述】:

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

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

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

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

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

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

我们将不胜感激。

谢谢

【问题讨论】:

    标签: c# gridview textbox autopostback


    【解决方案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 来修改我的购物车了。

    【讨论】:

      【解决方案2】:

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

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

      ajax 是一种选择吗?

      【讨论】:

      • 我一直在处理完整的回发,但在使用 ajax 发回信息的方式上并没有学到太多东西......它在我的列表中 :-) 我实际上完成了我的这个项目.列数是一个变量(基于显示的特定项目的大小选项)。我将在下面发布我使用的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多