簡體   English   中英

C#GridView動態創建帶有文本框的列

[英]C# GridView dynamically built columns with textboxes ontextchanged

我的頁面是一個批量訂單,其中包含許多產品和各種尺寸選項。

我有一個帶有3個帶有標簽的靜態列的gridview。 然后有一些動態構建的列。

每個動態構建的列中都有一個文本框。 文本框用於數量。

嘗試使用每次更改文本框時輸入的數量更新服務器(可能是ontextchanged事件),或者逐列循環遍歷每行,並收集所有具有數量的項目,並一次處理所有這些項目及其數量(通過按鈕onclick)。

如果我將構建GridView的過程放在if(!Page.IsPostBack)的后面,則當textchanged事件觸發時,gridview僅獲得靜態字段,而動態字段消失了。

如果我刪除了if(!Page.IsPostBack),則收集和構建頁面的過程將在處理上過於繁瑣,並且花費太長時間才能再次呈現該頁面。

一些建議,將不勝感激。

謝謝

我最終通過修改和使用在這里找到的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修改我的購物車。

您如何構建動態列? 您是在處理諸如rowdatabound,rowcreated之類的事件,還是要使用以下方式呈現注入的html:

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

可以選擇使用ajax嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM