2011-12-07 17 views
0

テーブルを動的にバインドする次のコードを持つ関数があります。私はページの負荷でこの関数を呼び出しています。このメソッドが呼び出されると、テーブルにはチェックボックス、ラベル、およびテキストボックスという3つの列が含まれます。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のライフサイクルで実行する必要があります。 PreInitは、MSによるとこれに適しています。 take a look at the ASP.NET page life cycleロードが遅すぎる場合(特に、チェックボックスのクリックのポストバックデータを処理するIPostBackDataHandler.LoadPostDataがありません)。

また、これは類似したto this stack overflow questionです。

+0

私は同じ機能を呼び出すOnSelectedIndexChangeのドロップダウンを持っているpreinitから関数を呼び出す間、それは最初に正常に動作します 問題は、ドロップダウンで値を変更し、関数内でデフォルトに変更されました。 – Mac

1

あなたがやっているように聞こえますが、それはかなり近づいています。

しかし、1つの問題があります。

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

このブロックは完全に削除してください。問題はポストバック時にasp.netが実際にページを2回レンダリングすることです。最初のレンダーでは、その行がチェックボックスの状態を強制終了しています。

私は、Hexxagonalがライフサイクルのinitまたはpreinitの部分でこれを行うと言っていますが、私たちは動的にコントロールを生成するページがたくさんあります。それらのために私たちは常にpage_loadで生成を処理し、それは完全に動作します。

+0

ブロックを削除した後も結果は同じです – Mac