2011-08-25 14 views
1

私はhereのgridviewのすべてを選択チェックボックス機能を使用しています。ここで使用されるスクリプトには1つの問題があります。Gridviewすべてのチェックボックスのチェックを発行

ヘッダチェックボックスを選択すると、すべてのテンプレート(行)チェックボックスが選択されます。テンプレートchecboxをすべて選択解除すると、ヘッダーchecboxはまだチェックされたままです。その場合にヘッダチェックボックスの選択を解除するには?

助けてください!

答えて

1

まず、CheckBox1にCss Classを追加し、後でclass="chk-all"に使用します。

次に、ItemTemplateチェックボックスにjavascript関数を追加します。

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

次に、いくつかのjQueryを使用して、class="chk-all"のチェックボックスを選択します。どれもいずれかが選択されていないため、他のチェックボックスの1つがクリックされた、あなたが単一のものを選択しているので、HeaderTemplateのチェックボックスがチェックされるべきではない

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

は、私はすぐに未チェックに設定します。またはすべてのチェックボックスが既にチェックされています。つまり、チェックされていない他のチェックボックスを変更しているときに、HeaderTemplateのチェックボックスをチェックしないでください。

編集

P.S.この回答は、jQuery javascriptライブラリにスクリプトリファレンスを追加する必要があります。

1

これは、.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 + "')"); 
    } 
} 
関連する問題