Select Allという名前のチェックボックスがあります。これをクリックすると、Gridview 内の他のすべてのチェック ボックスがオンになります。しかし、グリッド内のチェックボックスのいずれかがオフになると、この Select All Checkbox が自動的にオフになります。これについて私を助けてくれる人はいますか?
ありがとうございました。
これは、クライアント側またはサーバー側で行うことができます
javascript/jquery を使用したクライアント側
チェックボックスは動的に追加されるため、on
メソッドを使用してチェックボックスを関数にバインドし、状態が変化したときに起動する必要があります。
$(document).ready(function() {
$(".checkbox").on("change", function() {
if(!$(this).is(":checked")){
$(".selectAll").prop('checked', false);
}
});
});
以下は、完全に機能する select All を備えたjsFiddleです。
サーバ側
チェックボックスがチェックされていないときにポストバック(ajax)でイベントハンドラーを使用し、すべてのチェックボックスをループしてチェックを外します
Font-end は ajax を使用して部分的なポストバックを実行し、グリッドビューを更新します。すべてのチェックボックスとグリッドビューのチェックボックスを選択すると、ポストバックがトリガーされます。
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:GridView ID="gvCheckBoxes" runat="server">
<Columns>
<asp:TemplateField >
<ItemTemplate>
<asp:CheckBox ID="cbCheckBox" OnCheckedChanged="CheckBoxChanged" AutoPostBack="true" runat="server" />
</ItemTemplate>
/asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="cbSelectAll"/>
</Triggers>
</asp:UpdatePanel>
コードビハインド
select All チェック ボックス イベント ハンドラーは、グリッドビューをループし、チェックボックスを見つけます。すべて選択チェックボックスがチェックされている場合はチェックを入れ、それ以外の場合はチェックを外します
gridview チェックボックス イベント ハンドラーは、チェックボックスをループし、フラグを設定して、すべて選択チェックボックスをオンにするかオフにするかを決定します。チェックボックスのいずれかがチェックされていない場合、ループが存在します。したがって、すべて選択もチェックを外す必要があります
public void SelectAll (Object sender, Eventargs e)
{
foreach (var row in grid.Rows)
{
var checkBox = (CheckBox)row.FindControl("cbCheckBox");
checkBox.Checked = cbSelectAll.Checked;
}
}
public void CheckBoxChanged(Object sender, Eventargs e)
{
var isSelectAll = true;
foreach (var row in grid.Rows)
{
var checkBox = (CheckBox)row.FindControl("cbCheckBox");
if(!checkBox.Checked)
{
isSelectAll = false;
break;
}
}
cbSelectAll.Checked = isSelectAll;
}
このコードを見てください。これがあなたを助けることを願っています
<div>
<asp:CheckBox ID="chkSelectAll" runat="server" />
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" oncheckedchanged="chkSelect_CheckedChanged" AutoPostBack="true" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
protected void chkSelect_CheckedChanged(object sender, EventArgs e)
{
bool isFound = false;
foreach (GridViewRow gvr in GridView1.Rows)
{
CheckBox chkSelect = gvr.FindControl("chkSelect") as CheckBox;
if (chkSelect.Checked == false)
{
isFound = true;
break;
}
}
if (isFound)
{
chkSelectAll.Checked = false;
}
else
{
chkSelectAll.Checked = true;
}
}
私が考えることができる最善の方法は、GridViewCheckBoxField
をTemplateField
. 次に、新しいものをイベントに接続しますasp:CheckBox
。コード ビハインドでは、CheckedChanged イベントを処理し、チェックボックスのいずれかがオフに変更されたときに、「すべてチェック」チェックボックスを切り替えることができます。TemplateField
CheckedChanged
ユーザーがグリッドの子行のチェックを外した場合、上記のコードを修正しました。グリッド ヘッダーは自動的にオフになります。
<script type="text/javascript">
function UncheckHeader(headerchk) {
var gvcheck = document.getElementById('gvdetails');
var inputs = gvcheck.rows[0].getElementsByTagName('input');
inputs[0].checked = false;
}
function SelectAll(headerchk) {
var gvcheck = document.getElementById('gvdetails');
var i;
// if true checked all checkboxes
if (headerchk.checked) {
for (i = 0; i < gvcheck.rows.length; i++) {
var inputs = gvcheck.rows[i].getElementsByTagName('input');
inputs[0].checked = true;
}
}
//if condition fails uncheck all checkboxes in gridview
else {
for (i = 0; i < gvcheck.rows.length; i++) {
var inputs = gvcheck.rows[i].getElementsByTagName('input');
inputs[0].checked = false;
}
}
}
</script>
<asp:GridView ID="gvdetails" runat="server" >
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkheader" runat="server" onclick="javascript:SelectAll(this)" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkchild" runat="server" onclick="javascript:UncheckHeader(this)" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
詳細はこちら