Frage

Ich verwende eine CheckBox in Kopfzeile der Spalte und dass coulmn ist Container Cehckboxes zu.

Ich möchte ein chechBox in Header in Repeater verwenden, und wenn diese Steuerung aktiviert ist, Kontrollkästchen Zeilen geprüft wird.

Wie kann ich das tun?

War es hilfreich?

Lösung 4

CheckBox Checkall = SendBoxrep.Controls[0].Controls[0].FindControl("Checkall") as CheckBox;

Andere Tipps

Die beste Antwort wäre clientseitige Javascript beinhalten. Sie würden die ID der Kontrollen mit controlName.clientID bekommen und haben es in die Javascript codiert ..

Aber hier ist die naive Dotnet nur antworten:

In Anbetracht der Repeater:

    <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>

Und der Code-Behind:

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

End Class

Dies kann leicht mit jQuery erreicht werden. Angenommen, Sie hatten die folgende Tabelle, die durch Ihren Repeater:

<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>

Dann können Sie einen Ereignishandler für das Kontrollkästchen in der Kopfzeile zuweisen, die alle anderen Kontrollkästchen wechseln werden:

$(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);
    });
});

Hier ist der relevante C # -Code von Bill Antwort:

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top