Gridview Проверка наличия всех флажков - PullRequest
1 голос
/ 25 августа 2011

Я использую опцию «Выбрать все», чтобы выбрать опцию здесь .Сценарий, используемый здесь, имеет одну проблему.

Если я выберу флажок заголовка, будет выбран весь флажок шаблона (строк).Если затем я отменим выбор всего шаблона checbox, заголовок checbox все равно останется отмеченным.Как снять флажок заголовка в этом случае?

Пожалуйста, совет!

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Это способ .NET, однако решения jQuery намного чище:

Сценарий:

 function resetParent(parentRow)
 {
    document.getElementById(parentRow).checked = false;
 }

Разметка:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    Caption="Pick Some Technologies" BackColor="White" BorderColor="#CC9966" OnRowDataBound="ObjectDataSource1__RowDataBound"
    BorderStyle="None" BorderWidth="1px" CellPadding="4">
    <Columns>
    <asp:TemplateField HeaderText="Include" SortExpression="Include">
        <HeaderTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" onclick="changeAllCheckBoxes(this)" />
        </HeaderTemplate>
        <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" />
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Center" />
    </asp:TemplateField>
    <asp:BoundField DataField="Name" HeaderText="Technology" />
    </Columns>
    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
</asp:GridView>

Код-позади:

private CheckBox parentCheckBox = null;
protected void ObjectDataSource1__RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        parentCheckBox = (CheckBox)e.Row.FindControl("CheckBox1");
    }    

    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox childCheckBox = (CheckBox)e.Row.FindControl("CheckBox1");
        childCheckBox.Attributes.Add("onclick","resetParent('" + parentCheckBox.ClientID + "')");
    }
}
1 голос
/ 25 августа 2011

Во-первых, я бы добавил класс Css к CheckBox1 для использования позже class="chk-all".

Затем добавьте функцию javascript к флажку ItemTemplate.

<ItemTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" onclick="UnselectAllOption()"  />
</ItemTemplate>

Затем с помощью некоторого jQuery установите флажок class="chk-all".

function UnselectAllOption(){  
    $('.chk-all').attr("checked", false");  
}

Я установил этот флажок как не отмеченный, как только один из других флажков будет установлен, потому что ни один из них не выбран, и вы выбираете один, поэтому флажок в шаблоне Header не должен быть установлен. ИЛИ все флажки уже установлены, что означает, что один из элементов HeaderTemplate не должен быть установлен, так как вы заменяете один из других на не проверяемый.

редактировать

p.s. этот ответ требует добавления ссылки на скрипт в библиотеку javascript jQuery .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...