0

私は列のヘッダーでチェックボックスを使用し、その列はコンテナCehckboxesでもあります。

Repeater のヘッダーに chechBox を使用したいのですが、このコントロールがチェックされている場合、行のチェックボックスがチェックされています。

これを行うにはどうすればよいですか?

4

4 に答える 4

3

最良の答えは、クライアント側の JavaScript を使用することです。controlName.clientID を使用してコントロールの ID を取得し、JavaScript にコード化します。

しかし、素朴なドットネットのみの答えは次のとおりです。

リピーターの場合:

    <asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate>
       <div> <asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="SetAllChecks" AutoPostBack="true" /></div>
    <hr />
    </HeaderTemplate>
    <ItemTemplate>
       <div> <asp:CheckBox ID="CheckBox2" Checked='<%# Container.DataItem("isChecked") %>' runat="server" /></div>
    </ItemTemplate>
    </asp:Repeater>

コードビハインド:

Imports System.Data  
Imports System.Collections

Partial Class _Default  
Inherits System.Web.UI.Page  

Public Sub SetAllChecks(ByVal sender As Object, ByVal e As System.EventArgs)  
    Dim amIChecked As CheckBox = CType(sender, CheckBox)  

    Dim rowCt As Integer = Repeater1.Items.Count  
    Dim ridx As Integer = 0  
    For ridx = 0 To rowCt - 1  
        Dim cbox As CheckBox = CType(Repeater1.Items(ridx).FindControl("CheckBox2"), CheckBox)  
        cbox.Checked = amIChecked.Checked  
    Next  

End Sub  

Public Sub Repeater1_OnItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim dt As New DataTable()
        dt.Columns.Add(New DataColumn("isChecked"))
        Dim tmprow As DataRow = dt.NewRow()
        tmprow("isChecked") = True
        dt.Rows.Add(tmprow)
        tmprow = dt.NewRow()
        tmprow("isChecked") = False
        dt.Rows.Add(tmprow)
        tmprow = dt.NewRow()
        tmprow("isChecked") = False
        dt.Rows.Add(tmprow)
        tmprow = dt.NewRow()
        tmprow("isChecked") = False
        dt.Rows.Add(tmprow)
        tmprow = dt.NewRow()
        tmprow("isChecked") = False
        dt.Rows.Add(tmprow)

        Repeater1.DataSource = dt
        Repeater1.DataBind()

    End If

End Sub

クラス終了

于 2009-10-24T16:52:10.573 に答える
1

これは jQuery で簡単に実現できます。リピーターによって生成された次のテーブルがあるとします。

<table>
  <thead>
      <tr>
          <th><input type="checkbox" name="headerchk" id="headerchk" /></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><input type="checkbox" name="chk1" id="garbage1_added_my_repeater_chk" /></td>
      </tr>
      <tr>
          <td><input type="checkbox" name="chk2" id="garbage2_added_my_repeater_chk" /></td>
      </tr>
      <tr>
          <td><input type="checkbox" name="chk3" id="garbage3_added_my_repeater_chk" /></td>
      </tr>
  </tbody>
</table>

次に、他のすべてのチェックボックスを切り替えるヘッダーのチェックボックスにイベント ハンドラーを割り当てることができます。

$(function() {
    $('#headerchk').change(function() {
        // Toggle all inputs of type checkbox and with ids starting with chk:
        $('input[type=checkbox][id$=chk]').attr('checked', this.checked);
    });
});
于 2009-10-24T15:59:12.193 に答える
0

ビルの回答からの関連する C# コードは次のとおりです。

public void SetAllChecks(object sender, EventArgs e)
{
    CheckBox amIChecked = (CheckBox)sender;
    foreach (RepeaterItem ri in Repeater1.Items)
    {
        CheckBox cbox = (CheckBox)ri.FindControl("CheckBox2");
        cbox.Checked = amIChecked.Checked;
    }
}
于 2009-10-26T15:37:26.497 に答える
0
CheckBox Checkall = SendBoxrep.Controls[0].Controls[0].FindControl("Checkall") as CheckBox;
于 2009-10-27T09:08:55.857 に答える