上接扩展GridView控件(7) - 行的指定复选框选中时改变行的样式

简介:
5、重写OnPreRender方法,注册上面那段客户端脚本
InBlock.gif  /// <summary> 
InBlock.gif                 /// OnPreRender 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="e"></param> 
InBlock.gif                 protected  override  void OnPreRender(EventArgs e) 
InBlock.gif                { 
InBlock.gif                         base.OnPreRender(e); 
InBlock.gif 
InBlock.gif                         if ((!String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CheckBoxID)    
InBlock.gif                                && !String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CssClassRowSelected)) 
InBlock.gif                                || !String.IsNullOrEmpty(CssClassMouseOver)) 
InBlock.gif                        { 
InBlock.gif                                 // 注册实现改变行样式的客户端脚本 
InBlock.gif                                 if (!Page.ClientScript.IsClientScriptBlockRegistered( "jsChangeRowClassName")) 
InBlock.gif                                { 
InBlock.gif                                        Page.ClientScript.RegisterClientScriptBlock( 
InBlock.gif                                                 this.GetType(), 
InBlock.gif                                                 "jsChangeRowClassName", JavaScriptConstant.jsChangeRowClassName 
InBlock.gif                                                ); 
InBlock.gif                                } 
InBlock.gif                                 // 注册调用双击CheckBox函数的客户端脚本 
InBlock.gif                                 if (!Page.ClientScript.IsStartupScriptRegistered( "jsInvokeDoubleClickCheckBox")) 
InBlock.gif                                { 
InBlock.gif                                        Page.ClientScript.RegisterStartupScript( 
InBlock.gif                                                 this.GetType(), 
InBlock.gif                                                 "jsInvokeDoubleClickCheckBox"@"<script type=""text/javascript "">yy_DoubleClickCheckBox();</script>" 
InBlock.gif                                                ); 
InBlock.gif                                } 
InBlock.gif                        } 
InBlock.gif                }
 
6、重写OnRowDataBound以通过调用相关的javascript函数实现我们想要的功能。

/// <summary> 
InBlock.gif                 /// OnRowDataBound 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="e"></param> 
InBlock.gif                 protected  override  void OnRowDataBound(GridViewRowEventArgs e) 
InBlock.gif                { 
InBlock.gif                         if (e.Row.RowType == DataControlRowType.DataRow) 
InBlock.gif                        { 
InBlock.gif                                 if (!String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CheckBoxID) && !String.IsNullOrEmpty(ChangeRowCSSByCheckBox.CssClassRowSelected)) 
InBlock.gif                                { 
InBlock.gif                                         foreach (TableCell tc  in e.Row.Cells) 
InBlock.gif                                        { 
InBlock.gif                                                 // 如果发现了指定的CheckBox 
InBlock.gif                                                 if (tc.FindControl(ChangeRowCSSByCheckBox.CheckBoxID) !=  null
InBlock.gif                                                { 
InBlock.gif                                                        CheckBox chk = tc.FindControl(ChangeRowCSSByCheckBox.CheckBoxID)  as CheckBox; 
InBlock.gif                                                         string cssClassUnchecked = ""; 
InBlock.gif 
InBlock.gif                                                         // 根据RowState的不同,取消行的选中后<tr>的不同样式(css类名) 
InBlock.gif                                                         switch (e.Row.RowState) 
InBlock.gif                                                        { 
InBlock.gif                                                                 case DataControlRowState.Alternate: 
InBlock.gif                                                                        cssClassUnchecked =  base.AlternatingRowStyle.CssClass; 
InBlock.gif                                                                         break
InBlock.gif                                                                 case DataControlRowState.Edit: 
InBlock.gif                                                                        cssClassUnchecked =  base.EditRowStyle.CssClass; 
InBlock.gif                                                                         break
InBlock.gif                                                                 case DataControlRowState.Normal: 
InBlock.gif                                                                        cssClassUnchecked =  base.RowStyle.CssClass; 
InBlock.gif                                                                         break
InBlock.gif                                                                 case DataControlRowState.Selected: 
InBlock.gif                                                                        cssClassUnchecked =  base.SelectedRowStyle.CssClass; 
InBlock.gif                                                                         break
InBlock.gif                                                                 default
InBlock.gif                                                                        cssClassUnchecked = ""; 
InBlock.gif                                                                         break
InBlock.gif                                                        } 
InBlock.gif 
InBlock.gif                                                         // 给行增加一个yy_selected属性,用于客户端判断行是否是选中状态 
InBlock.gif                                                        e.Row.Attributes.Add( "yy_selected""false"); 
InBlock.gif 
InBlock.gif                                                         // 添加CheckBox的click事件的客户端调用代码 
InBlock.gif                                                         string strOnclickScript = ""; 
InBlock.gif                                                         if (!String.IsNullOrEmpty(chk.Attributes[ "onclick"])) 
InBlock.gif                                                        { 
InBlock.gif                                                                strOnclickScript += chk.Attributes[ "onclick"]; 
InBlock.gif                                                        } 
InBlock.gif                                                        strOnclickScript +=  ";if (this.checked) " 
InBlock.gif                                                                +  "{yy_ChangeRowClassName('" + e.Row.ClientID +  "', '" + ChangeRowCSSByCheckBox.CssClassRowSelected +  "', true);" 
InBlock.gif                                                                +  "yy_SetRowSelectedAttribute('" + e.Row.ClientID +  "', 'true')} " 
InBlock.gif                                                                +  "else {yy_ChangeRowClassName('" + e.Row.ClientID +  "', '" + cssClassUnchecked +  "', true);" 
InBlock.gif                                                                +  "yy_SetRowSelectedAttribute('" + e.Row.ClientID +  "', 'false')}"
InBlock.gif                                                        chk.Attributes.Add( "onclick", strOnclickScript); 
InBlock.gif 
InBlock.gif                                                         break
InBlock.gif                                                } 
InBlock.gif                                        } 
InBlock.gif                                } 
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                         base.OnRowDataBound(e); 
InBlock.gif                }
 
控件使用
添加这个控件到工具箱里,然后拖拽到webform上,设置CheckBoxID属性为模板列的项复选框的ID,CssClassRowSelected属性设置为选中行的样式的CSS类名,则可以实现改变通过CheckBox选中的行的样式的功能。
ObjData.cs
InBlock.gif using System; 
InBlock.gif using System.Data; 
InBlock.gif using System.Configuration; 
InBlock.gif using System.Web; 
InBlock.gif using System.Web.Security; 
InBlock.gif using System.Web.UI; 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI.WebControls.WebParts; 
InBlock.gif using System.Web.UI.HtmlControls; 
InBlock.gif 
InBlock.gif using System.ComponentModel; 
InBlock.gif 
/// <summary> 
/// OjbData 的摘要说明 
/// </summary> 
InBlock.gif public  class OjbData 
InBlock.gif
InBlock.gif         public OjbData() 
InBlock.gif        { 
InBlock.gif                 // 
InBlock.gif                 // TODO: 在此处添加构造函数逻辑 
InBlock.gif                 // 
InBlock.gif        } 
InBlock.gif 
InBlock.gif        [DataObjectMethod(DataObjectMethodType.Select,  true)] 
InBlock.gif         public DataTable Select() 
InBlock.gif        { 
InBlock.gif                DataTable dt =  new DataTable(); 
InBlock.gif                dt.Columns.Add( "no"typeof( string)); 
InBlock.gif                dt.Columns.Add( "name"typeof( string)); 
InBlock.gif 
InBlock.gif                 for ( int i = 0; i < 30; i++) 
InBlock.gif                { 
InBlock.gif                        DataRow dr = dt.NewRow(); 
InBlock.gif                        dr[0] =  "no" + i.ToString().PadLeft(2, '0'); 
InBlock.gif                        dr[1] =  "name" + i.ToString().PadLeft(2, '0'); 
InBlock.gif 
InBlock.gif                        dt.Rows.Add(dr); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 return dt; 
InBlock.gif        } 
InBlock.gif}
 
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
        <title>SmartGridView</title> 
</head> 
<body> 
        <form id="form1" runat="server"> 
                <div> 
                        <yyc:SmartGridView ID="SmartGridView1" runat="server" DataSourceID="ObjectDataSource1" 
                                AutoGenerateColumns="false"> 
                                <Columns> 
                                        <asp:TemplateField> 
                                                <itemtemplate> 
                                                        <%# Container.DataItemIndex + 1 %> 
                                                 </itemtemplate> 
                                        </asp:TemplateField> 
                                        <asp:TemplateField ItemStyle-Width="100px"> 
                                                <itemtemplate> 
                                                        <asp:checkbox id="checkitem" runat="server" /> 
                                                </itemtemplate> 
                                        </asp:TemplateField> 
                                        <asp:BoundField DataField="no" HeaderText="序号" /> 
                                        <asp:BoundField DataField="name" HeaderText="名称" /> 
                                </Columns> 
                                <ChangeRowCSSByCheckBox CheckBoxID="checkitem" CssClassRowSelected="SelectedRow" /> 
                        </yyc:SmartGridView> 
                        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select" 
                                TypeName="OjbData"></asp:ObjectDataSource> 
                </div> 
        </form> 
</body> 
</html>
 
InBlock.gif /*测试版的实现 结束*/
 




     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/345526,如需转载请自行联系原作者


相关文章
|
4月前
|
前端开发
复选框样式修改(复选框变为圆形)
复选框样式修改(复选框变为圆形)
|
4月前
|
索引
[Qt5&控件] 下拉框ComBoBox和层叠窗口StackedWidget控件组合使用
[Qt5&控件] 下拉框ComBoBox和层叠窗口StackedWidget控件组合使用
130 0
|
C++
Qt动态添加控件并设置大小位置等属性
Qt动态添加控件并设置大小位置等属性
964 0
|
API Windows 容器
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件(上)
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件
196 0
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件(上)
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件(下)
MFC应用程序——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件
163 0
|
SQL
【实现】表单控件里的子控件的变化。
     前情回顾: 【实现】表单控件的UI布局,实现方式         上一篇说的是表单布局上的变化,也就是通过TR、TD的设置,实现了多行多列的效果。那么格子画好了,我们 可以往里面放控件了。
876 0
|
C# 前端开发
wpf中的datagrid绑定操作按钮是否显示或者隐藏
如图,需要在wpf中的datagrid的操作那列有个确认按钮,然后在某些条件下确认按钮可见,某些情况下不可见的,放在mvc里直接在cshtml页面中if..else就行了。 但是在wpf里不行。。网上搜索了好久才找到解决方法,原来只是binding那个visiable属性就行了,
6890 0