介绍
在GridView中如果每行都有复选框的话,选中了某个复选框则修改该复选框所在行的样式,这是经常要用到的功能,因此我们来扩展一下GridView控件。
控件开发
1、新建一个继承自GridView的类。
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265396.gif)
/**////<summary>
///继承自GridView
///</summary>
[ToolboxData(@"<{0}:SmartGridViewrunat='server'></{0}:SmartGridView>")]
publicclassSmartGridView:GridView
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265396.gif)
![](http://www.vs2005.com/DownloadPictures/200709/20070911102653126.gif)
{
}
2、新建一个ChangeRowCSSByCheckBox实体类,有两个属性
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
![](http://www.vs2005.com/DownloadPictures/200709/20070911102653171.gif)
usingSystem.ComponentModel;
![](http://www.vs2005.com/DownloadPictures/200709/20070911102653171.gif)
namespaceYYControls.SmartGridView
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265396.gif)
![](http://www.vs2005.com/DownloadPictures/200709/20070911102653126.gif)
{
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
/**////<summary>
///通过行的CheckBox的选中与否来修改行的样式
///实体类
///</summary>
[TypeConverter(typeof(ExpandableObjectConverter))]
publicclassChangeRowCSSByCheckBox
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
privatestring_checkBoxID;
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
/**////<summary>
///根据哪个ChecxBox来判断是否选中了行,指定该CheckBox的ID
///</summary>
[
Description("根据哪个ChecxBox来判断是否选中了行,指定该CheckBox的ID"),
Category("扩展"),
DefaultValue(""),
NotifyParentProperty(true)
]
publicstringCheckBoxID
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
get
{return_checkBoxID;}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
set
{_checkBoxID=value;}
}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265330.gif)
privatestring_cssClassRowSelected;
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
/**////<summary>
///选中行的样式的CSS类名
///</summary>
[
Description("选中行的样式的CSS类名"),
Category("扩展"),
DefaultValue(""),
NotifyParentProperty(true)
]
publicstringCssClassRowSelected
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
get
{return_cssClassRowSelected;}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
set
{_cssClassRowSelected=value;}
}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265330.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
/**////<summary>
///ToString()
///</summary>
///<returns></returns>
publicoverridestringToString()
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
return"ChangeRowCSSByCheckBox";
}
}
}
3、在继承自GridView的类中加一个复杂对象属性,该复杂对象就是第2步创建的那个ChangeRowCSSByCheckBox
privateChangeRowCSSByCheckBox_changeRowCSSByCheckBox;
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265396.gif)
/**////<summary>
///通过行的CheckBox的选中与否来修改行的样式
///</summary>
[
Description("通过行的CheckBox的选中与否来修改行的样式"),
Category("扩展"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
PersistenceMode(PersistenceMode.InnerProperty)
]
publicvirtualChangeRowCSSByCheckBoxChangeRowCSSByCheckBox
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265396.gif)
![](http://www.vs2005.com/DownloadPictures/200709/20070911102653126.gif)
{
get
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
if(_changeRowCSSByCheckBox==null)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
_changeRowCSSByCheckBox=newChangeRowCSSByCheckBox();
}
return_changeRowCSSByCheckBox;
}
}
4、新建一个JavaScriptConstant类,把我们要用到的javascript存在一个常量里
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
![](http://www.vs2005.com/DownloadPictures/200709/20070911102653171.gif)
namespaceYYControls.SmartGridView
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265396.gif)
![](http://www.vs2005.com/DownloadPictures/200709/20070911102653126.gif)
{
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
/**////<summary>
///javascript
///</summary>
publicclassJavaScriptConstant
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
internalconststringjsChangeRowClassName=@"<scripttype=""text/javascript"">
//<![CDATA[
functionyy_ChangeRowClassName(id,cssClass,isForce)
{
objRow=document.getElementById(id);
//如果row的yy_selected属性是'false'或者没有yy_selected属性或者要求强制设置
//那么修改该行的className
if(!objRow.attributes['yy_selected']||objRow.attributes['yy_selected'].value=='false'||isForce==true)
{
document.getElementById(id).className=cssClass;
}
}
//设置行的yy_selected属性
functionyy_SetRowSelectedAttribute(id,bln)
{
document.getElementById(id).attributes['yy_selected'].value=bln;
}
//以id结尾的CheckBox执行两次click事件
functionyy_DoubleClickCheckBox(id)
{
varallInput=document.all.tags('INPUT');
for(vari=0;i<allInput.length;i++)
{
if(allInput[i].type=='checkbox'&&allInput[i].id.endWith('checkitem'))
{
//触发click事件而不执行yy_ClickCheckItem()函数
isInvokeClickCheckItem=false;
allInput[i].click();
isInvokeClickCheckItem=false;
allInput[i].click();
}
}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265330.gif)
}
String.prototype.endWith=function(oString){
varreg=newRegExp(oString+""$"");
returnreg.test(this);
}
//]]>
</script>";
}
}
5、重写OnPreRender方法,注册上面那段客户端脚本
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265396.gif)
/**////<summary>
///OnPreRender
///</summary>
///<paramname="e"></param>
protectedoverridevoidOnPreRender(EventArgse)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265396.gif)
![](http://www.vs2005.com/DownloadPictures/200709/20070911102653126.gif)
{
base.OnPreRender(e);
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265330.gif)
if((!String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CheckBoxID)
&&!String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CssClassRowSelected))
||!String.IsNullOrEmpty(CssClassMouseOver))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
//注册实现改变行样式的客户端脚本
if(!Page.ClientScript.IsClientScriptBlockRegistered("jsChangeRowClassName"))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"jsChangeRowClassName",JavaScriptConstant.jsChangeRowClassName
);
}
//注册调用双击CheckBox函数的客户端脚本
if(!Page.ClientScript.IsStartupScriptRegistered("jsInvokeDoubleClickCheckBox"))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265360.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110265475.gif)
{
Page.ClientScript.RegisterStartupScript(
this.GetType(),
"jsInvokeDoubleClickCheckBox",@"<scripttype=""text/javascript"">yy_DoubleClickCheckBox();</script>"
);
}
}
}
6、重写OnRowDataBound以通过调用相关的javascript函数实现我们想要的功能。
相关推荐
在ASP.NET 2.0 API中,GridView控件是一个常用的数据展示组件,它允许开发者以表格形式展示数据。本教程将深入探讨如何在GridView中集成CheckBox控件,以实现用户交互和数据操作。 首先,GridView控件是ASP.NET Web...
在JavaScript环境下,处理GridView的数据交互尤为重要,特别是当需要获取用户通过Checkbox选择的行信息时。本文将详细介绍如何使用JavaScript获取GridView中选中Checkbox行的信息。 首先,理解基础概念: 1. **...
在ASP.NET开发中,GridView控件常用于展示数据表格,而Checkbox则经常被用来实现用户选择功能。在“获取GridView中Checkbox的值”这个场景下,我们通常关注的是如何在用户交互后,如点击按钮时,获取到GridView中被...
在ASP.NET开发中,GridView控件是一个非常常用的数据展示组件,尤其在处理表格数据时。在涉及分页功能时,用户可能需要在多页中选择不同的数据项,例如通过复选框(Checkbox)来标记。当用户在多页之间切换并进行...
GridView 控件可以实现鼠标移到某一行时改变该行的背景色,以便高亮显示当前行数据。例如,可以使用 JavaScript 代码来实现该功能。 7. GridView 实现删除时弹出确认对话框 GridView 控件可以实现删除时弹出确认...
在本教程中,我们将深入探讨如何为GridView控件添加Checkbox,以便用户能够多选数据,并在回传页面后处理这些选择。 首先,我们需要在GridView中添加一个Checkbox列,这在需要用户选择多个项目执行相同操作的场景中...
接着,在后台代码中定义ckbSelect_CheckedChanged函数,根据CheckBox的选中状态改变行颜色: ```csharp protected void ckbSelect_CheckedChanged(object sender, EventArgs e) { foreach (GridViewRow row in ...
其中包含了一个GridView控件,用于展示数据,并且每个数据行都有一个CheckBox。 2. **C#后台代码**: ```csharp protectedvoidPage_Load(objectsender,EventArgse) { if(!IsPostBack) { // 数据源初始化,...
GridView控件提供了一种称为行选中的功能,允许用户通过点击行来选择一条记录。首先,确保`AllowSelecting`属性设置为`true`。然后,可以使用`SelectedIndexChanged`事件来响应用户的选择。当用户点击一行时,`...
在实际开发中,我们常常需要在GridView中添加一些交互元素,比如本文所述的为GridView控件添加Checkbox复选框控件,以实现数据项的选中操作,从而支持批量处理等功能。 首先,要实现为GridView控件添加Checkbox复选...
在Web开发过程中,经常需要与表格形式的数据交互,其中使用到gridview控件来展示数据。...通过这些代码,开发者可以在自己的Web项目中实现对gridview控件中checkbox选中状态的管理和业务逻辑操作。
在GridView控件中,第0列有放一个CheckBox控件,现想实现对CheckBox进行单选,怎么实现呢?下面小编通过本文给大家分享Asp.net 中使用GridView控件实现Checkbox单选功能,一起看看吧
- 遍历`GridView`中的所有行,查找名为`chkDo`的`CheckBox`控件。 - 如果某个`CheckBox`被选中,则获取该行的数据键(`DataKey`)中的`LoginID`,调用`LoginInfoBLL.Delete`方法执行删除操作。 - 根据删除操作的结果...
GridView控件默认支持单选,即用户只能在一个页面内选择一行数据。然而,如果想要实现跨页面的多选,我们需要额外的工作来扩展其功能。 1. **启用多选**:默认情况下,GridView不支持多选。要启用多选,我们需要在...
总之,"C#_winform_GridView_CheckBox_多选_全选"这个主题涵盖了在C# WinForm应用程序中使用GridView控件实现带有复选框的多选和全选功能。这包括自定义列类型、设置多选模式、添加全选复选框、处理选中状态的保存和...
在Windows Forms(Winform)开发中,GridView控件是一个常用的数据展示工具,它允许用户以表格形式查看和操作数据。而当需要实现用户交互,比如选择行或项时,Checkbox功能就显得尤为重要。本篇文章将深入探讨如何在...
4. **监听CheckBox状态改变**:为每个CheckBox添加CheckedChangeListener,当CheckBox状态改变时,更新对应数据列表中的状态,并调用notifyDataSetChanged()通知ListView数据已更新。 5. **处理点击事件**:...
在本篇文章中,我们将深入探讨如何有效地利用GridView控件实现多种功能,包括数据的分页、排序、编辑、删除以及各种自定义效果。 1. **无代码分页排序**:通过设置`AllowSorting`属性为`True`,可以在不编写额外...
当用户点击“全选”按钮时,遍历`GridView`中的每一行,找到每行中的`CheckBox`控件,并根据“全选”按钮的状态更新这些`CheckBox`的状态。同理,如果点击的是“全不选”按钮,则所有`CheckBox`都将被取消选中。 **...
3. **事件处理**:为了获取所有选中的CheckBox,需要在GridView外设置一个全局的List来存储CheckBox的状态。在CheckBox的监听器中,当状态改变时,更新这个列表。此外,可以添加一个按钮,点击后遍历列表,获取所有...