`
isiqi
  • 浏览: 16685838 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

GridView控件改变CheckBox选中的行的样式

阅读更多
介绍
在GridView中如果每行都有复选框的话,选中了某个复选框则修改该复选框所在行的样式,这是经常要用到的功能,因此我们来扩展一下GridView控件。


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

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

2、新建一个ChangeRowCSSByCheckBox实体类,有两个属性
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

usingSystem.ComponentModel;

namespaceYYControls.SmartGridView
{
/**////<summary>
///通过行的CheckBox的选中与否来修改行的样式
///实体类
///</summary>

[TypeConverter(typeof(ExpandableObjectConverter))]
publicclassChangeRowCSSByCheckBox
{
privatestring_checkBoxID;
/**////<summary>
///根据哪个ChecxBox来判断是否选中了行,指定该CheckBox的ID
///</summary>

[
Description(
"根据哪个ChecxBox来判断是否选中了行,指定该CheckBox的ID"),
Category(
"扩展"),
DefaultValue(
""),
NotifyParentProperty(
true)
]
publicstringCheckBoxID
{
get{return_checkBoxID;}
set{_checkBoxID=value;}
}


privatestring_cssClassRowSelected;
/**////<summary>
///选中行的样式的CSS类名
///</summary>

[
Description(
"选中行的样式的CSS类名"),
Category(
"扩展"),
DefaultValue(
""),
NotifyParentProperty(
true)
]
publicstringCssClassRowSelected
{
get{return_cssClassRowSelected;}
set{_cssClassRowSelected=value;}
}


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

publicoverridestringToString()
{
return"ChangeRowCSSByCheckBox";
}

}

}


3、在继承自GridView的类中加一个复杂对象属性,该复杂对象就是第2步创建的那个ChangeRowCSSByCheckBox
privateChangeRowCSSByCheckBox_changeRowCSSByCheckBox;
/**////<summary>
///通过行的CheckBox的选中与否来修改行的样式
///</summary>

[
Description(
"通过行的CheckBox的选中与否来修改行的样式"),
Category(
"扩展"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
PersistenceMode(PersistenceMode.InnerProperty)
]
publicvirtualChangeRowCSSByCheckBoxChangeRowCSSByCheckBox
{
get
{
if(_changeRowCSSByCheckBox==null)
{
_changeRowCSSByCheckBox
=newChangeRowCSSByCheckBox();
}

return_changeRowCSSByCheckBox;
}

}

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

namespaceYYControls.SmartGridView
{
/**////<summary>
///javascript
///</summary>

publicclassJavaScriptConstant
{
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();
      }
     }

}
String.prototype.endWith=function(oString){
varreg=newRegExp(oString+""$"");
returnreg.test(this);
}
//]]>
</script>
";
}

}


5、重写OnPreRender方法,注册上面那段客户端脚本
/**////<summary>
///OnPreRender
///</summary>
///<paramname="e"></param>

protectedoverridevoidOnPreRender(EventArgse)
{
base.OnPreRender(e);

if((!String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CheckBoxID)
&&!String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CssClassRowSelected))
||!String.IsNullOrEmpty(CssClassMouseOver))
{
//注册实现改变行样式的客户端脚本
if(!Page.ClientScript.IsClientScriptBlockRegistered("jsChangeRowClassName"))
{
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"jsChangeRowClassName",JavaScriptConstant.jsChangeRowClassName
);
}

//注册调用双击CheckBox函数的客户端脚本
if(!Page.ClientScript.IsStartupScriptRegistered("jsInvokeDoubleClickCheckBox"))
{
Page.ClientScript.RegisterStartupScript(
this.GetType(),
"jsInvokeDoubleClickCheckBox",@"<scripttype=""text/javascript"">yy_DoubleClickCheckBox();</script>"
);
}

}

}

6、重写OnRowDataBound以通过调用相关的javascript函数实现我们想要的功能。
/**////<summary>
///OnRowDataBound
///</summary>
///<paramname="e"></param>

protectedoverridevoidOnRowDataBound(GridViewRowEventArgse)
{
if(e.Row.RowType==DataControlRowType.DataRow)
{
if(!String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CheckBoxID)&&!String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CssClassRowSelected))
{
foreach(TableCelltcine.Row.Cells)
{
//如果发现了指定的CheckBox
if(tc.FindControl(ChangeRowCSSByCheckBox.CheckBoxID)!=null)
{
CheckBoxchk
=tc.FindControl(ChangeRowCSSByCheckBox.CheckBoxID)asCheckBox;
stringcssClassUnchecked="";

//根据RowState的不同,取消行的选中后<tr>的不同样式(css类名)
switch(e.Row.RowState)
{
caseDataControlRowState.Alternate:
cssClassUnchecked
=base.AlternatingRowStyle.CssClass;
break;
caseDataControlRowState.Edit:
cssClassUnchecked
=base.EditRowStyle.CssClass;
break;
caseDataControlRowState.Normal:
cssClassUnchecked
=base.RowStyle.CssClass;
break;
caseDataControlRowState.Selected:
cssClassUnchecked
=base.SelectedRowStyle.CssClass;
break;
default:
cssClassUnchecked
="";
break;
}


//给行增加一个yy_selected属性,用于客户端判断行是否是选中状态
e.Row.Attributes.Add("yy_selected","false");

//添加CheckBox的click事件的客户端调用代码
color: #0
分享到:
评论

相关推荐

    GridView控件中CheckBox(2.0)

    在ASP.NET 2.0 API中,GridView控件是一个常用的数据展示组件,它允许开发者以表格形式展示数据。本教程将深入探讨如何在GridView中集成CheckBox控件,以实现用户交互和数据操作。 首先,GridView控件是ASP.NET Web...

    js获得Gridview中选中checkbox行的信息

    在JavaScript环境下,处理GridView的数据交互尤为重要,特别是当需要获取用户通过Checkbox选择的行信息时。本文将详细介绍如何使用JavaScript获取GridView中选中Checkbox行的信息。 首先,理解基础概念: 1. **...

    获取GridView中Checkbox的值

    在ASP.NET开发中,GridView控件常用于展示数据表格,而Checkbox则经常被用来实现用户选择功能。在“获取GridView中Checkbox的值”这个场景下,我们通常关注的是如何在用户交互后,如点击按钮时,获取到GridView中被...

    gridview 分页保存每页的Checkbox选中的值

    在ASP.NET开发中,GridView控件是一个非常常用的数据展示组件,尤其在处理表格数据时。在涉及分页功能时,用户可能需要在多页中选择不同的数据项,例如通过复选框(Checkbox)来标记。当用户在多页之间切换并进行...

    Gridview控件的使用详解..............

    GridView 控件可以实现鼠标移到某一行时改变该行的背景色,以便高亮显示当前行数据。例如,可以使用 JavaScript 代码来实现该功能。 7. GridView 实现删除时弹出确认对话框 GridView 控件可以实现删除时弹出确认...

    【ASP.NET编程知识】在ASP.NET 2.0中操作数据之五十:为GridView控件添加Checkbox.docx

    在本教程中,我们将深入探讨如何为GridView控件添加Checkbox,以便用户能够多选数据,并在回传页面后处理这些选择。 首先,我们需要在GridView中添加一个Checkbox列,这在需要用户选择多个项目执行相同操作的场景中...

    GridView中点击CheckBox选中一行来改变此行的颜色

    接着,在后台代码中定义ckbSelect_CheckedChanged函数,根据CheckBox的选中状态改变行颜色: ```csharp protected void ckbSelect_CheckedChanged(object sender, EventArgs e) { foreach (GridViewRow row in ...

    C# GridView+CheckBox删除记录

    其中包含了一个GridView控件,用于展示数据,并且每个数据行都有一个CheckBox。 2. **C#后台代码**: ```csharp protectedvoidPage_Load(objectsender,EventArgse) { if(!IsPostBack) { // 数据源初始化,...

    GridView分页和选择某条记录

    GridView控件提供了一种称为行选中的功能,允许用户通过点击行来选择一条记录。首先,确保`AllowSelecting`属性设置为`true`。然后,可以使用`SelectedIndexChanged`事件来响应用户的选择。当用户点击一行时,`...

    在ASP.NET 2.0中操作数据之五十:为GridView控件添加Checkbox

    在实际开发中,我们常常需要在GridView中添加一些交互元素,比如本文所述的为GridView控件添加Checkbox复选框控件,以实现数据项的选中操作,从而支持批量处理等功能。 首先,要实现为GridView控件添加Checkbox复选...

    JavaScript取得gridview中获取checkbox选中的值

    在Web开发过程中,经常需要与表格形式的数据交互,其中使用到gridview控件来展示数据。...通过这些代码,开发者可以在自己的Web项目中实现对gridview控件中checkbox选中状态的管理和业务逻辑操作。

    Asp.net 中使用GridView控件实现Checkbox单选

    在GridView控件中,第0列有放一个CheckBox控件,现想实现对CheckBox进行单选,怎么实现呢?下面小编通过本文给大家分享Asp.net 中使用GridView控件实现Checkbox单选功能,一起看看吧

    GridView中选择checkBox的项删除事件

    - 遍历`GridView`中的所有行,查找名为`chkDo`的`CheckBox`控件。 - 如果某个`CheckBox`被选中,则获取该行的数据键(`DataKey`)中的`LoginID`,调用`LoginInfoBLL.Delete`方法执行删除操作。 - 根据删除操作的结果...

    GridView控件中实现跨页面多选

    GridView控件默认支持单选,即用户只能在一个页面内选择一行数据。然而,如果想要实现跨页面的多选,我们需要额外的工作来扩展其功能。 1. **启用多选**:默认情况下,GridView不支持多选。要启用多选,我们需要在...

    C#_winform_GridView_CheckBox_多选_全选

    总之,"C#_winform_GridView_CheckBox_多选_全选"这个主题涵盖了在C# WinForm应用程序中使用GridView控件实现带有复选框的多选和全选功能。这包括自定义列类型、设置多选模式、添加全选复选框、处理选中状态的保存和...

    winform中gridview的checkbox使用案例

    在Windows Forms(Winform)开发中,GridView控件是一个常用的数据展示工具,它允许用户以表格形式查看和操作数据。而当需要实现用户交互,比如选择行或项时,Checkbox功能就显得尤为重要。本篇文章将深入探讨如何在...

    解决ListView嵌套CheckBox滑动时选中状态错乱

    4. **监听CheckBox状态改变**:为每个CheckBox添加CheckedChangeListener,当CheckBox状态改变时,更新对应数据列表中的状态,并调用notifyDataSetChanged()通知ListView数据已更新。 5. **处理点击事件**:...

    GridView 控件经典用法

    在本篇文章中,我们将深入探讨如何有效地利用GridView控件实现多种功能,包括数据的分页、排序、编辑、删除以及各种自定义效果。 1. **无代码分页排序**:通过设置`AllowSorting`属性为`True`,可以在不编写额外...

    GridView和CheckBox结合

    当用户点击“全选”按钮时,遍历`GridView`中的每一行,找到每行中的`CheckBox`控件,并根据“全选”按钮的状态更新这些`CheckBox`的状态。同理,如果点击的是“全不选”按钮,则所有`CheckBox`都将被取消选中。 **...

    GridView和CheckBox结合使用

    3. **事件处理**:为了获取所有选中的CheckBox,需要在GridView外设置一个全局的List来存储CheckBox的状态。在CheckBox的监听器中,当状态改变时,更新这个列表。此外,可以添加一个按钮,点击后遍历列表,获取所有...

Global site tag (gtag.js) - Google Analytics