Как использовать элемент в заголовке повторителя в ASP.net с C # 2008
-
06-07-2019 - |
Вопрос
Я использую флажок в заголовке столбца, и этот столбец также является контейнером Cehckboxes.
Я хочу использовать chechBox в заголовке в Repeater, и когда этот элемент управления отмечен, флажки строк отмечены.
Как мне это сделать?
Решение 4
CheckBox Checkall = SendBoxrep.Controls[0].Controls[0].FindControl("Checkall") as CheckBox;
Другие советы
Лучший ответ - это JavaScript на стороне клиента. Вы получите идентификатор элементов управления, используя controlName.clientID, и закодируете его в javascript.
Но вот только наивный ответ Dotnet:
С учетом ретранслятора:
<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
Конечный класс
Этого легко добиться с помощью 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);
});
});
Вот соответствующий код 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;
}
}