2016-07-15 3 views
1

実行時にCheckBoxesとLabelsで塗りつぶす表のセルがあります。テーブル内のすべてのチェックボックスをループします。

List<string> lstUserPool = new List<string>(); 
DataTable dt = GetData("SELECT UserName FROM eData ORDER BY UserName;", "Data Source = lewcomp1\\COMPLIANCE; Initial Catalog = ComplianceData; Integrated Security = True;"); 

for (int i = 1; i < dt.Rows.Count; i++) 
{ 
    CheckBox cb = new CheckBox(); 
    cb.ID = "cb" + dt.Rows[i]["Username"].ToString(); 
    Label lbl = new Label(); 
    lbl.ID = "lbl" + dt.Rows[i]["Username"].ToString(); 
    lbl.Text = dt.Rows[i]["Username"].ToString(); 
    lbl.Font.Size = new FontUnit("18px"); 

    if (IsOdd(i)) 
    { 
     cellUsersPoolLeft.Controls.Add(cb); 
     cellUsersPoolLeft.Controls.Add(lbl); 
     cellUsersPoolLeft.Controls.Add(new LiteralControl("<br/>")); 
    } 

    if (IsEven(i)) 
    { 
     cellUsersPoolRight.Controls.Add(cb); 
     cellUsersPoolRight.Controls.Add(lbl); 
     cellUsersPoolRight.Controls.Add(new LiteralControl("<br/>")); 
    } 
} 

その後、これらのチェックボックスをループして、チェックされているものとされていないものを確認したいと思います。私はSO上に見つかった様々な例を試しましたが、運がありません。チェックボックスがTableCellに追加されていない場合とほとんど同じです。以下のループの両方でチェックボックスコントロールが見つかりません:

foreach (Control ctl in cellUsersPoolRight.Controls) 
{ 
    if (ctl is CheckBox) 
    { 

    } 
} 
//foreach(var checkBox in cellUsersPoolRight.Controls.OfType<CheckBox>()) 
//{ 
// if (checkBox.Checked) 
// { 
//  naz.Add(checkBox.ID); 
// } 
//} 

答えて

0

リピータで[チェックボックス]と[データバインド]を使用してItemTemplateにラベルを付けることをお勧めします。これにより、簡単にリピータをループすることでデータを取得できます。追加のデータが必要な場合は、それらを格納するためにリピータ内にHiddenfieldを追加します。あなたの分離コードで次に

<asp:Repeater ID="UserRepeater" runat="server"> 
        <HeaderTemplate> 
         <table> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <tr> 
         <td> 
          <asp:CheckBox ID="UserCheckBox" runat="server" Checked='<%# Convert.ToBoolean(Eval("IsUserChecked")) %>' ToolTip='<%# Eval("UserId") %>' 
          onmouseover="title='';" /> 
         </td> 
         <td> 
          <asp:Label ID="UserNameLabel" runat="server" Text='<%# Eval("UserName") %>'></asp:Label> 
         </td> 
         </tr> 
        </ItemTemplate> 
        <FooterTemplate> 
         </table> 
        </FooterTemplate> 
        </asp:Repeater> 

//initialize repeater data 
userRepeater.DataSource = dt; 
userRepeater.DataBind(); 

は、その後、あなたimagebutton_clickのポストバックであなたはリピーター

foreach (RepeaterItem ri in UserRepeater.Items) 
       { 
       CheckBox userCheckBox = ri.FindControl("UserCheckBox") as CheckBox; 
       } 
+0

私はリピーターで初めてこのアプローチをしています。ありがとう! 1の代わりに2列のデータを許可するようにItemTemplateを変更する方法を知っていますか? –

+0

これは非常に強力で、数回使った後はリストを管理するために私の行くところです。これはチェックボックスのリストに最適です。私はそれらをすべてチェックするために使用するいくつかの素晴らしいjavascriptを持っているか、jqueryでそれらをすべてチェック解除します。それも非常に便利な機能です。 – Enkode

+0

すでに2つの列があります。 Look 1カラム/ tdはチェックボックス用、1カラム/ tdはユーザ名用です。追加する場合は、tdマークアップと追加データを追加するだけです。 – Enkode

0

申し訳ありませんが、まだコメントに書き込めません。

どのイベントでコントロールを追加しようとしていますか、そのコントロールを読み込もうとしていますか?

詳しくはthisをご覧ください。 ページのイベントの順序を確認し、ライフサイクルで正しいイベントを使用している場合は、

+0

それはイメージボタンのクリックイベント –

+1

大丈夫です:) でからアイテムを取得することができますWebアプリケーションでは、すべてのプロセスが各ポストバックで実行されるため、コントロールに何かを追加することはできません。 。 この問題を解決するには、データコンテナにデータを追加し、データソースをコントロールにバインドするか、データソースから自分自身を追加する必要があります。 –

関連する問題