2012-02-17 5 views
0

動的にテーブルを作成します。テーブルには、関連付けられたIDを持つチェックボックスが含まれており、ユーザーに表示されます。私は表示部に問題はありません。 ユーザーがいくつかの指定されたチェックボックスをチェックして、送信ボタンを押した後、私は彼の選択肢、チェックされているチェックボックスとその関連IDを取得したいですが、ポストバック中に私のテーブルには、ユーザーの選択どんな援助も深く感謝しています。ASP .NETのテーブルデータの永続化

乾杯 IpがDohの

<asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server"> 
</asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:Label ID="dummyLabel" runat="server" Text="Label"></asp:Label> 
     <asp:Button ID="submitButton" onclick="async_Click" runat="server" Text="Submit" /> 

     <asp:Table ID="usrTable" EnableViewState="true" runat="server"> 
     <asp:TableHeaderRow> 
      <asp:TableHeaderCell Text="Id"/> 
      <asp:TableHeaderCell Text="Customer Name"/> 
     </asp:TableHeaderRow> 
    </asp:Table> 
    </ContentTemplate> 

</asp:UpdatePanel> 


を次のように私のaspxページは、私がコードファイルに次のように持っている

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      CreateTable(); 
     } 
if (IsPostBack) 
     { 
      List<int> choices = GetUserChoices(); 

      //Do Something with user choices 
     } 



    } 


protected List<int> GetUserChoices() 
    { 
     List<int> choices = new List<int>(); 
     foreach (TableRow row in usrTable.Rows) 
     { 
      CheckBox cb = row.Controls[0] as CheckBox; 

      if ((cb != null) && (cb.Checked)) 
      { 
       choices.Add(int.Parse(cb.Text)); 
      } 
     } 

     return choices; 
    } 

    void CreateTable() 
    { 
     dummyLabel.Text = DateTime.Now.ToString(); 
     for (int i = 0; i < 3; i++) 
     { 
      TableCell cell1 = new TableCell();    
      CheckBox cb = new CheckBox(); 
      cb.Text = i.ToString(); 
      cb.AutoPostBack = true; 
      cb.EnableViewState = true; 
      cell1.Controls.Add(cb); 

      TableCell cell2 = new TableCell(); 
      cell2.Text = String.Format("Clm : {0} - Row : {1}", 2, i); 

      TableRow row = new TableRow(); 
      row.Cells.Add(cell1); 
      row.Cells.Add(cell2); 

      usrTable.Rows.Add(row); 
     } 
    } 

ラベル値は保持されますが、myテーブルには追加した行はありません。

+1

テーブルを生成するために使用したコードをお知らせください。 runat = "server"とマークされていないコントロールはviewstateを保持しないので、ポストバックには存在しません。値は、Request.FormまたはRequest.QueryStringプロパティを使用して使用可能になります。 –

+0

PostBackでcreateTableメソッドが呼び出されていません。 – DotNetUser

+0

私は基本的に、ユーザがチェックしたダイナミックテーブルのチェックボックスを知りたいと思っています。他の投稿を見てみると、テーブル全体を元の状態に戻す方法はないようですが、代わりにそれを再作成しても構いませんが、ユーザーの選択を得る方法を探したいと思います –

答えて

0

doh、CheckBoxコントロールのIDを設定するのを忘れていました。ポストバックに同じIDを設定すると、CheckBoxのステータスがユーザーの選択肢で更新されました。

void CreateTable() 
     { 
      dummyLabel.Text = DateTime.Now.ToString(); 
      for (int i = 0; i < 3; i++) 
      { 
       TableCell cell1 = new TableCell();    
       CheckBox cb = new CheckBox(); 
       cb.Text = i.ToString(); 
       cb.AutoPostBack = true; 
       cb.EnableViewState = true; 
       cb.ID = i.ToString(); 
       cell1.Controls.Add(cb); 

       TableCell cell2 = new TableCell(); 
       cell2.Text = String.Format("Clm : {0} - Row : {1}", 2, i); 

       TableRow row = new TableRow(); 
       row.Cells.Add(cell1); 
       row.Cells.Add(cell2); 

       usrTable.Rows.Add(row); 
      } 
     } 
関連する問題