GridView控件每行复选框的全选与取消全选

平时使用GridView的时候经常要给每行加一个复选框,然后还需要放置一个单独的全选复选框,通过单击它来让这些复选框全选或取消全选,每次实现这样的功能都要写一段javascript,麻烦,所以扩展它。


控件开发
1、新建一个继承自GridView的类。
/**/ ///<summary>
///继承自GridView
///</summary>

[ToolboxData( @" <{0}:SmartGridViewrunat='server'></{0}:SmartGridView> " )]
public class SmartGridView:GridView
{
}

2、新建一个JavaScriptConstant类,把我们要用到的javascript存在一个常量里
using System;
using System.Collections.Generic;
using System.Text;

namespace YYControls.SmartGridView
{
/**////<summary>
///javascript
///</summary>

publicclassJavaScriptConstant
{
internalconststringjsCheckAll=@"<scripttype=""text/javascript"">
//<![CDATA[

//隐藏字段的ID,用于存每组的全选复选框ID
varhdnAllName='[$AllName$]';
//隐藏字段的ID,用于存每的项复选框ID
varhdnItemName='[$ItemName$]';
//组分隔符,一个全选复选框和其对应的n个项复选框为一个组
vargroupSeparator='[$GroupSeparator$]';
//项分隔符,项复选框每个项之间的分隔符
varitemSeparator='[$ItemSeparator$]';

varstrAlls=GetObject(hdnAllName).value;
varstrItems=GetObject(hdnItemName).value;

//全选复选框数组
vararyAlls=strAlls.split(groupSeparator);
//项复选框数组,每行有一个组的所有项复选框
vararyItems=strItems.split(groupSeparator);

//全选复选框被单击,参数为该全选复选框这个对象
functionClickCheckAll(objAll)
{
//每个全选复选框
for(vari=0;i<aryAlls.length;i++)
{
//该全选复选框是所单击的全选复选框
if(aryAlls[i]==objAll.id)
{
//该全选复选框同组下的项复选框数组
aryItem=aryItems[i].split(itemSeparator);
for(varj=0;j<aryItem.length;j++)
{
//单击的全选复选框是选中状态,并且项复选框不是disabled,则选中
if(objAll.checked&&!GetObject(aryItem[j]).parentElement.disabled)
{
GetObject(aryItem[j]).checked=true;
}
//否则
else
{
GetObject(aryItem[j]).checked=false;
}
}

break;
}
}
}

//项复选框被单击
functionClickCheckItem()
{
//每组项复选框
for(vari=0;i<aryItems.length;i++)
{
//该组的所有项复选框数组
aryItem=aryItems[i].split(itemSeparator);
//标记,是否同组的项复选框都被选中
varbln=true;
for(varj=0;j<aryItem.length;j++)
{
//如果该项复选框没被选中,并且不是disabled,则bln设为false
if(!GetObject(aryItem[j]).checked&&!GetObject(aryItem[j]).parentElement.disabled)
{
bln=false;
break;
}
}

//bln为true,则设置同组的全选复选框为选中
if(bln)
{
GetObject(aryAlls[i]).checked=true;
}
//否则
else
{
GetObject(aryAlls[i]).checked=false;
}
}
}

functionGetObject(param)
{
returndocument.getElementById(param);
}

//]]>
</script>
";
}

}


3、新建一个CheckboxAll类,有两个属性
using System;
using System.Collections.Generic;
using System.Text;

using System.ComponentModel;
using System.Web.UI;

namespace YYControls.SmartGridView
{
/**////<summary>
///CheckboxAll的摘要说明。
///</summary>

[ToolboxItem(false)]
publicclassCheckboxAll
{
privatestring_checkboxAllID;
/**////<summary>
///模板列全选复选框ID
///</summary>

publicstringCheckboxAllID
{
get{return_checkboxAllID;}
set{_checkboxAllID=value;}
}


privatestring_checkboxItemID;
/**////<summary>
///模板列项复选框ID
///</summary>

publicstringCheckboxItemID
{
get{return_checkboxItemID;}
set{_checkboxItemID=value;}
}


/**////<summary>
///ToString()
///</summary>
///<returns></returns>

publicoverridestringToString()
{
return"CheckboxAll";
}

}

}


4、新建一个继承自CollectionBase的类CheckboxAlls
using System.Collections;
using System.ComponentModel;
using System.Web.UI;

namespace YYControls.SmartGridView
{
/**////<summary>
///CheckboxAlls的摘要说明。
///注意要继承自CollectionBase
///</summary>

[
ToolboxItem(
false),
ParseChildren(
true)
]
publicclassCheckboxAlls:CollectionBase
{
/**////<summary>
///构造函数
///</summary>

publicCheckboxAlls()
:
base()
{
}


/**////<summary>
///实现IList接口
///获取或设置指定索引处的元素。
///</summary>
///<paramname="index">要获得或设置的元素从零开始的索引</param>
///<returns></returns>

publicCheckboxAllthis[intindex]
{
get
{
return(CheckboxAll)base.List[index];
}

set
{
base.List[index]=(CheckboxAll)value;
}

}


/**////<summary>
///实现IList接口
///将某项添加到System.Collections.IList中。
///</summary>
///<paramname="item">要添加到System.Collections.IList的System.Object。</param>

publicvoidAdd(CheckboxAllitem)
{
base.List.Add(item);
}


/**////<summary>
///实现IList接口
///从System.Collections.IList中移除特定对象的第一个匹配项。
///</summary>
///<paramname="index">要从System.Collections.IList移除的System.Object</param>

publicvoidRemove(intindex)
{
if(index>-1&&index<base.Count)
{
base.List.RemoveAt(index);
}

}

}

}


5、在继承自GridView的类中加一个复杂对象属性,该复杂对象就是第4步创建的那个CheckboxAlls
private CheckboxAlls_checkboxAlls;
/**/ ///<summary>
///复选框组集合一个组由一个全选复选框和多个项复选框组成
///</summary>

[
PersistenceMode(PersistenceMode.InnerProperty),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Description(
" 复选框组集合一个组由一个全选复选框和多个项复选框组成 " ),
Category(
" 扩展 " )
]
public virtual CheckboxAllsCheckboxAlls
{
get
{
if(_checkboxAlls==null)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值