C#GridView动态构建的列,文本框ontextchanged
我的页面是一个批量订单,有许多产品和各种尺寸的选择 我有一个gridview,它有3个带标签的静态列。 然后是一些动态构建的列 每个动态构建的列中都有一个文本框。 文本框表示数量 尝试使用每次更改文本框时输入的数量更新服务器(可能是ContextChanged事件),或者逐列循环遍历每行,收集具有数量的所有项目,并一次性处理这些项目及其数量(通过按钮onclick) 如果我将构建GridView的进程放在If(!Page.IsPostBack)后面,那么当textchanged事件触发GridView时,只会获取静态字段,而动态字段则消失 如果删除If(!Page.IsPostBack),则收集和生成页面的过程对处理来说太繁重,并且再次呈现页面所需的时间太长 如能提供一些建议,将不胜感激C#GridView动态构建的列,文本框ontextchanged,c#,gridview,textbox,autopostback,C#,Gridview,Textbox,Autopostback,我的页面是一个批量订单,有许多产品和各种尺寸的选择 我有一个gridview,它有3个带标签的静态列。 然后是一些动态构建的列 每个动态构建的列中都有一个文本框。 文本框表示数量 尝试使用每次更改文本框时输入的数量更新服务器(可能是ContextChanged事件),或者逐列循环遍历每行,收集具有数量的所有项目,并一次性处理这些项目及其数量(通过按钮onclick) 如果我将构建GridView的进程放在If(!Page.IsPostBack)后面,那么当textchanged事件触发GridV
谢谢如何构建动态列?您是在处理诸如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发送信息方面还没有学到很多东西。。。它在我的清单上:-)我实际上完成了我项目的这一部分。列数是一个变量(基于显示的特定项目的大小选项)。我会把我用过的贴在下面。