2011-12-07 67 views
0

我有以下代碼動態綁定表的函數。我在頁面加載中調用這個函數。調用此方法後,表格將包含三列:複選框,標籤和文本框。html表綁定問題

我也有一個按鈕控制。當點擊這個按鈕時,我正在檢查表格內選中的複選框,然後將數據插入到與選中的複選框相對應的數據庫中。

問題是,當單擊按鈕時,由於按鈕單擊也調用頁面加載,調用下面的函數並因此重新創建了表中的所有元素,所以它沒有存儲複選框的選中狀態。

我不能在這裏使用Page.IsPostBack,因爲當按鈕被點擊時應該加載表。如果我寫的內部下面的代碼,如果(!Page.IsPostBack)然後點擊鏈接它沒有在表中

try 
{ 
    ManageVIN objMngVin = new ManageVIN(); 
    DataTable tblVins = objMngVin.MyFunction(clientCode); 
    if (tblAssociateFleet.Rows.Count > 1) 
    { 
     for (int i = 1; i <= tblAssociateFleet.Rows.Count - 1; i++) 
     { 
      tblAssociateFleet.Rows[i].Cells.Clear(); 
     } 
    } 
    if (tblVins != null && tblVins.Rows.Count > 0) 
    { 
     foreach (DataRow dr in tblVins.Rows) 
     { 
      HtmlTableRow tblRow = new HtmlTableRow(); 
      tblRow.Attributes.Add("class", "tblrow"); 
      HtmlTableCell tblCell1 = new HtmlTableCell(); 
      CheckBox chk = new CheckBox(); 
      chk.CssClass = "selctChk"; 
      if (!Page.IsPostBack) 
      { 
       chk.Checked = false; 
      } 
      tblCell1.Controls.Add(chk); 
      HtmlTableCell tableCelll2 = new HtmlTableCell(); 
      Label lblVinVlaue = new Label(); 
      lblVinVlaue.Text = Convert.ToString(dr["VIN"]); 
      tableCelll2.Controls.Add(lblVinVlaue); 
      HtmlTableCell tableCell3 = new HtmlTableCell(); 
      TextBox txtVinVal = new TextBox(); 
      txtVinVal.CssClass = "textEntry"; 
      tableCell3.Controls.Add(txtVinVal); 
      tblRow.Cells.Add(tblCell1); 
      tblRow.Cells.Add(tableCelll2); 
      tblRow.Cells.Add(tableCell3); 
      tblAssociateFleet.Rows.Add(tblRow); 
     } 
    } 
} 

我該如何處理這個問題找到任何行?

回答

1

您應該在Init或PreInit生命週期中執行此操作。根據MS,PreInit是首選。如果您take a look at the ASP.NET page life cycle加載有點太晚(特別是缺少IPostBackDataHandler.LoadPostData,它會處理複選框單擊的回發數據)。

此外,這是類似的to this stack overflow question

+0

從preinit調用函數時,它第一次正常工作,但現在我有一個下拉也OnSelectedIndexChange我打電話相同的功能 問題是更改下拉列表中的值,然後單擊按鈕下拉選擇索引在功能中更改爲默認值。 – Mac

1

這聽起來像你這樣做的方式是非常接近正確的。

但是,我看到一個問題。你有一個塊指出:

if (!Page.IsPostBack) 
{ 
    chk.Checked = false; 
} 

完全刪除該塊。問題是,在回發asp.net實際上呈現兩次頁面。在第一次渲染中,該行正在消除複選框的狀態。

我知道Hexxagonal說要在生命週期的init或preinit部分執行此操作,但是,我們有很多動態生成控件的頁面。對於那些我們總是在page_load中處理這一代的人來說,它完美的工作。

+0

即使刪除該塊後,結果也是一樣的 – Mac