gridview checkbox從服務(wù)器端和客戶端兩個(gè)方面實(shí)現(xiàn)全選和反選
更新時(shí)間:2013年01月20日 14:00:15 作者:
GridView中的checkbox的全選和反選在很多的地方都是要求實(shí)現(xiàn)的,所以下面就從服務(wù)器端和客戶端兩個(gè)方面實(shí)現(xiàn)了checkbox的選擇,感興趣的朋友可以了解下,希望本文對(duì)你有所幫助
GridView中的checkbox的全選和反選在很多的地方都是要求實(shí)現(xiàn)的,所以下面就從服務(wù)器端和客戶端兩個(gè)方面實(shí)現(xiàn)了checkbox的選擇。
1.服務(wù)器端:
html代碼如下:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="CheckAll" runat="server" OnCheckedChanged="CheckAll_CheckedChanged" AutoPostBack="true" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="num" HeaderText="num" SortExpression="num" />
</Columns>
</asp:GridView>
其中關(guān)于數(shù)據(jù)的獲取不是重點(diǎn),所以就選擇了使用sqldatasource控件來實(shí)現(xiàn)數(shù)據(jù)的獲取。 GridView中使用了BoundField綁定了ID,num這兩個(gè)數(shù)據(jù)表的字段。在上面的HTML代碼中,使用了模板列
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="CheckAll" runat="server" OnCheckedChanged="CheckAll_CheckedChanged" AutoPostBack="true" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
header部分是全選的checkbox,item的部分是單個(gè)的checkbox部分。 (請(qǐng)注意AutoPostBack要設(shè)置為true,要不然無法觸動(dòng)服務(wù)器端的代碼)
具體的后臺(tái)的代碼:
protected void CheckAll_CheckedChanged(object sender,EventArgs e)
{
CheckBox ck = sender as CheckBox;
if (ck != null)
{
System.Web.UI.WebControls.GridView g = ck.NamingContainer.NamingContainer as System.Web.UI.WebControls.GridView;
for (Int32 i = 0; i < g.Rows.Count; i++)
{
(g.Rows[i].FindControl("CheckBox1") as CheckBox).Checked = ck.Checked;
}
}
}
protected void CheckBox1_CheckedChanged(object sender,EventArgs e)
{
var count = 0;
CheckBox ck = sender as CheckBox;
if (ck != null)
{
System.Web.UI.WebControls.GridView g = ck.NamingContainer.NamingContainer as System.Web.UI.WebControls.GridView;
for (Int32 i = 0; i < g.Rows.Count; i++)
{
if ((g.Rows[i].FindControl("CheckBox1") as CheckBox).Checked)
{
count++;
}
}
(g.HeaderRow.FindControl("CheckAll") as CheckBox).Checked =count==g.Rows.Count;
}
}
運(yùn)行頁面以后,可以看到點(diǎn)擊全選的checkbox,可以選擇全部。取消了全選的checkbox,那所以的checkbox也取消選中。如果單個(gè)的checkbox全選中一個(gè),那全選的checkbox也選中。如果有一個(gè)單個(gè)的checkbox沒有選中,那全選的checkbox也不選中。
下面來說說客戶端的實(shí)現(xiàn):
html代碼部分,請(qǐng)去除掉兩個(gè)checkbox的OnCheckedChanged和AutoPostBack。其他的不變。
<script type="text/javascript">
$(function() {
$("#GridView1 :checkbox").eq(0).click(function() {
if ($(this).is(":checked")) {
$(this).parent().parent().nextAll().find(":checkbox").attr("checked", "checked");
}
else {
$(this).parent().parent().nextAll().find(":checkbox").removeAttr("checked");
}
});
$("#GridView1 :checkbox").not($("#GridView1 :checkbox:first")).click(function() {
if ($(this).is(":checked")) {
if ($("#GridView1 :checked").length == $("#GridView1 :checkbox").length - 1) {
$("#GridView1 :checkbox").eq(0).attr("checked", "checked");
}
}
else {
$("#GridView1 :checkbox").eq(0).removeAttr("checked");
}
});
});
</script>
1.服務(wù)器端:
html代碼如下:
復(fù)制代碼 代碼如下:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="CheckAll" runat="server" OnCheckedChanged="CheckAll_CheckedChanged" AutoPostBack="true" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="num" HeaderText="num" SortExpression="num" />
</Columns>
</asp:GridView>
其中關(guān)于數(shù)據(jù)的獲取不是重點(diǎn),所以就選擇了使用sqldatasource控件來實(shí)現(xiàn)數(shù)據(jù)的獲取。 GridView中使用了BoundField綁定了ID,num這兩個(gè)數(shù)據(jù)表的字段。在上面的HTML代碼中,使用了模板列
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="CheckAll" runat="server" OnCheckedChanged="CheckAll_CheckedChanged" AutoPostBack="true" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
header部分是全選的checkbox,item的部分是單個(gè)的checkbox部分。 (請(qǐng)注意AutoPostBack要設(shè)置為true,要不然無法觸動(dòng)服務(wù)器端的代碼)
具體的后臺(tái)的代碼:
復(fù)制代碼 代碼如下:
protected void CheckAll_CheckedChanged(object sender,EventArgs e)
{
CheckBox ck = sender as CheckBox;
if (ck != null)
{
System.Web.UI.WebControls.GridView g = ck.NamingContainer.NamingContainer as System.Web.UI.WebControls.GridView;
for (Int32 i = 0; i < g.Rows.Count; i++)
{
(g.Rows[i].FindControl("CheckBox1") as CheckBox).Checked = ck.Checked;
}
}
}
protected void CheckBox1_CheckedChanged(object sender,EventArgs e)
{
var count = 0;
CheckBox ck = sender as CheckBox;
if (ck != null)
{
System.Web.UI.WebControls.GridView g = ck.NamingContainer.NamingContainer as System.Web.UI.WebControls.GridView;
for (Int32 i = 0; i < g.Rows.Count; i++)
{
if ((g.Rows[i].FindControl("CheckBox1") as CheckBox).Checked)
{
count++;
}
}
(g.HeaderRow.FindControl("CheckAll") as CheckBox).Checked =count==g.Rows.Count;
}
}
運(yùn)行頁面以后,可以看到點(diǎn)擊全選的checkbox,可以選擇全部。取消了全選的checkbox,那所以的checkbox也取消選中。如果單個(gè)的checkbox全選中一個(gè),那全選的checkbox也選中。如果有一個(gè)單個(gè)的checkbox沒有選中,那全選的checkbox也不選中。
下面來說說客戶端的實(shí)現(xiàn):
html代碼部分,請(qǐng)去除掉兩個(gè)checkbox的OnCheckedChanged和AutoPostBack。其他的不變。
復(fù)制代碼 代碼如下:
<script type="text/javascript">
$(function() {
$("#GridView1 :checkbox").eq(0).click(function() {
if ($(this).is(":checked")) {
$(this).parent().parent().nextAll().find(":checkbox").attr("checked", "checked");
}
else {
$(this).parent().parent().nextAll().find(":checkbox").removeAttr("checked");
}
});
$("#GridView1 :checkbox").not($("#GridView1 :checkbox:first")).click(function() {
if ($(this).is(":checked")) {
if ($("#GridView1 :checked").length == $("#GridView1 :checkbox").length - 1) {
$("#GridView1 :checkbox").eq(0).attr("checked", "checked");
}
}
else {
$("#GridView1 :checkbox").eq(0).removeAttr("checked");
}
});
});
</script>
相關(guān)文章
.Net Core路由處理的知識(shí)點(diǎn)與方法總結(jié)
這篇文章主要給大家介紹了關(guān)于.Net Core路由處理的知識(shí)點(diǎn)與方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
驗(yàn)證一個(gè)ASP.NET應(yīng)用程序和頁面的生命周期的實(shí)現(xiàn)代碼
我們知道ASP.NET Page的生命周期實(shí)際上是ASP.NET Application的生命周期的一部分。這個(gè)周期經(jīng)歷了HTTP Module => HTTP Handler => ASP.NET Page => Http Module這樣一個(gè)過程2012-04-04
WPF實(shí)現(xiàn)slide控件拖動(dòng)完成后改變變量值
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)slide控件拖動(dòng)完成后改變變量值,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
ASP.NET Core 6.0 中使用Autofac的項(xiàng)目實(shí)踐
本文主要介紹了ASP.NET Core 6.0 中使用Autofac的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
asp.net 簡(jiǎn)單實(shí)現(xiàn)禁用或啟用頁面中的某一類型的控件
最近在一個(gè)winform項(xiàng)目中碰到的一個(gè)功能,勾選一個(gè)checkbox后窗體中的其他控件不可用。由此想到asp.net項(xiàng)目中有時(shí)候也要用到這種功能。2009-11-11
asp.net中獲取遠(yuǎn)程網(wǎng)頁的內(nèi)容之一(downmoon原創(chuàng))
asp.net中獲取遠(yuǎn)程網(wǎng)頁的內(nèi)容之一(downmoon原創(chuàng))...2007-04-04
asp.net 生成靜態(tài)時(shí)的過濾viewstate的實(shí)現(xiàn)方法
有時(shí)候我們?cè)谟胊sp.net生成靜態(tài)文件的時(shí)候,總會(huì)出現(xiàn)一些viewstate的字符,因?yàn)槭庆o態(tài)的不是aspx文件,所有沒必要留了,精簡(jiǎn)代碼等原因,大家就需要看下面的方法了。2009-03-03

