提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2010-11-25 14:27:10.000|阅读 614 次
概述:我们在使用GridView的时候,很多时候需要使用CheckBox列,比如批量删除,批量审批,但是每每都需要记住繁琐的实现方法。多麻烦呀!本文将手把手教你如何扩展GridView之自带CheckBox ,希望对大家有帮助。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
我们在使用GridView的时候,很多时候需要使用CheckBox列,比如批量删除,批量审批,但是每每都需要记住繁琐的实现方法。多麻烦呀!本文将手把手教你如何扩展GridView之自带CheckBox ,希望对大家有帮助。
下面谈谈我这实现的思路:
因为GridView是基于模板的,Columns也不能在后台添加,所以排除通过添加Column来实现,而采用在GridView创建行的时候动态创建表单元格,在表头行上添加一个全选CheckBox,数据行上添加选择框,点击全选,通过向页面注册的脚本来实现全选。
下面就看看关键的代码:
为了增加灵活性,添加了一个属性,控制是否显示CheckBox列
//是否显示全选
[
Description("显示全选列"),
Category("扩展"),
DefaultValue(false)
]
public virtual bool ShowCheckAll
{
get
{
object obj2 = this.ViewState["ShowCheckAll"];
if (obj2 != null)
{
return (bool)obj2;
}
return false;
}
set
{
bool aShowCheckAll = this.ShowCheckAll;
if (value != aShowCheckAll)
{
this.ViewState["ShowCheckAll"] = value;
if (base.Initialized)
{
base.RequiresDataBinding = true;
}
}
}
}
用于控制选择列是添加到表的左端还是右端的属性
public enum CheckColumnAlign
{
Left, Right
}
//是否显示全选
[
Description("全选列的位置"),
Category("扩展"),
DefaultValue(CheckColumnAlign.Left)
]
public virtual CheckColumnAlign CheckColumnAlign
{
get
{
object obj2 = this.ViewState["CheckColumnAlign"];
if (obj2 != null)
{
return (CheckColumnAlign)obj2;
}
return CheckColumnAlign.Left;
}
set
{
CheckColumnAlign aCheckColumnAlign = this.CheckColumnAlign;
if (value != aCheckColumnAlign)
{
this.ViewState["CheckColumnAlign"] = value;
if (base.Initialized)
{
base.RequiresDataBinding = true;
}
}
}
}
在页面加载的时候,注册全选脚本
StringBuilder sb = new StringBuilder();
sb.Append(" <script type=\"text/javascript\">");
sb.Append("function CheckAll(oCheckbox)");
sb.Append("{");
sb.Append("var GridView2 = document.getElementById(\"" + this.ClientID + "\");");
sb.Append(" for(i = 1;i < GridView2.rows.length; i++)");
sb.Append("{");
sb.Append("var inputArray = GridView2.rows[i].getElementsByTagName(\"INPUT\");");
sb.Append("for(var j=0;j<inputArray.length;j++)");
sb.Append("{ if(inputArray[j].type=='checkbox')");
sb.Append("{if(inputArray[j].id.indexOf('ItemCheckBox',0)>-1){inputArray[j].checked =oCheckbox.checked; }} }");
sb.Append("}");
sb.Append(" }");
sb.Append("</script>");
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "CheckFun", sb.ToString(), false);
在GridView的RowCreate事件中,添加如下代码,用于创建CheckBox列
if (ShowCheckAll)
{
GridViewRow row = e.Row;
if (row.RowType == DataControlRowType.Header)
{
TableCell cell = new TableCell();
cell.Wrap = Wrap;
cell.Width = Unit.Pixel(50);
cell.Text = " <input id='Checkbox2' type='checkbox' onclick='CheckAll(this)'/><label>全选</label>";
if (CheckColumnAlign == CheckColumnAlign.Left)
{
row.Cells.AddAt(0, cell);
}
else
{
int index = row.Cells.Count;
row.Cells.AddAt(index, cell);
}
}
else if (row.RowType == DataControlRowType.DataRow)
{
TableCell cell = new TableCell();
cell.Wrap = Wrap;
CheckBox cb = new CheckBox();
cell.Width = Unit.Pixel(50);
cb.ID = "ItemCheckBox";
cell.Controls.Add(cb);
if (CheckColumnAlign == CheckColumnAlign.Left)
{
row.Cells.AddAt(0, cell);
}
else
{
int index = row.Cells.Count;
row.Cells.AddAt(index, cell);
}
}
}
用于记录CheckBox的ID的属性
public string CheckBoxID
{
get
{
return "ItemCheckBox";
}
}
使用的时候,只需要设置扩展GridView的ShowCheckAll=True,设置CheckColumnAlign为Left,CheckBox列在最左边,Right在最右面,注意因为没有添加Columns,所以Columns并没有因为因为添加了CheckBox列而变化,在Column的索引中,CheckBox列不在计算范围。
在扩展的GridView的OnRowDataBound事件中,就可以通过
CheckBox cb = e.Row.FindControl(gridView.CheckBoxID) as CheckBox;
if(cb!=null)
{
if(cb.Checked)
{
//...
}
}
来获取是否已经选中此行。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:博客转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢