2010-03-05 47 views
2

我的頁面是批量訂購表單,它有許多產品和各種大小選項。C#GridView動態構建帶有文本框的列ontextchanged

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

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

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

如果我把構建GridView的過程放在if(!Page.IsPostBack)的後面,那麼當textchanged事件觸發gridview時,只會得到靜態字段而動態字段不見了。

如果我刪除if(!Page.IsPostBack),則收集和構建頁面的過程在處理過程中過於沉重,並且需要很長時間才能再次呈現頁面。

一些建議,將不勝感激。

謝謝

回答

1

我最終通過修改和使用GridViewTemplate.cs動態部分構建了列,我發現here

由於我的文本框是基於它們的列名(基於大小選項)命名的,因此我可以遍歷大小選項並使用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來修改我的購物車。

0

你如何構建動態列?你在處理事件這樣的RowDataBound,rowcreated,或者是你渲染HTML注入喜歡的東西:

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

是阿賈克斯的選擇嗎?

+0

我一直在使用完整的回傳,並沒有學到太多的使用Ajax發送信息的方式......它在我的名單上:-) 我實際上完成了我的這個項目。列數是一個變量(根據顯示的特定項目的大小選項)。 我會發布我在下面使用的。 – tnriverfish 2010-03-08 14:13:15