为了让GridView的数据行可以响应鼠标的单击和双击事件,一般我们会在GridView的RowDataBound事件中给<tr>加上客户端代码,为了简化这个步骤,我们来扩展一下它。
控件开发
1、新建一个继承自GridView的类。
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
/**////<summary>
///继承自GridView
///</summary>
[ToolboxData(@"<{0}:SmartGridViewrunat='server'></{0}:SmartGridView>")]
publicclassSmartGridView:GridView
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271536.gif)
{
}
2、加两个属性,分别是单击行事件所对应的按钮的ID和双击行事件所对应的按钮的ID
privatestring_rowClickButtonID;
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
/**////<summary>
///单击行事件所对应的按钮的ID
///</summary>
[Description("单击行事件所对应的按钮的ID"),DefaultValue(""),Category("扩展")]
publicvirtualstringRowClickButtonID
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271536.gif)
{
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
get
{return_rowClickButtonID;}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
set
{_rowClickButtonID=value;}
}
![](http://www.vs2005.com/DownloadPictures/200709/20070911102715112.gif)
privatestring_rowDoubleClickButtonID;
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
/**////<summary>
///双击行事件所对应的按钮的ID
///</summary>
[Description("双击行事件所对应的按钮的ID"),DefaultValue(""),Category("扩展")]
publicvirtualstringRowDoubleClickButtonID
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271536.gif)
{
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
get
{return_rowDoubleClickButtonID;}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
set
{_rowDoubleClickButtonID=value;}
}
3、新建一个JavaScriptConstant类,把我们要用到的javascript存在一个常量里
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
![](http://www.vs2005.com/DownloadPictures/200709/20070911102715112.gif)
namespaceYYControls.SmartGridView
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271536.gif)
{
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
/**////<summary>
///javascript
///</summary>
publicclassJavaScriptConstant
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
internalconststringjsClickAndDoubleClick=@"<scripttype=""text/javascript"">
//<![CDATA[
varisDoubleClick=false;
functionyy_RowClick(id)
{
setTimeout(""yy_RowClickTimeout('""+id+""')"",300);
}
functionyy_RowClickTimeout(id)
{
if(isDoubleClick==false)
{
//执行ID所指按钮的click事件
document.getElementById(id).click();
}
isDoubleClick=true;
}
functionyy_RowDoubleClick(id)
{
if(isDoubleClick==true)
{
//执行ID所指按钮的click事件
document.getElementById(id).click();
}
isDoubleClick=true;
}
//]]>
</script>";
}
}
4、重写OnPreRender方法,注册上面那段客户端脚本
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
/**////<summary>
///OnPreRender
///</summary>
///<paramname="e"></param>
protectedoverridevoidOnPreRender(EventArgse)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271536.gif)
{
base.OnPreRender(e);
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271596.gif)
if(!String.IsNullOrEmpty(RowClickButtonID)||!String.IsNullOrEmpty(RowDoubleClickButtonID))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
if(!Page.ClientScript.IsClientScriptBlockRegistered("jsClickAndDoubleClick"))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"jsClickAndDoubleClick",JavaScriptConstant.jsClickAndDoubleClick
);
}
}
}
5、重写OnRowDataBound以实现数据行响应鼠标的单击和双击事件的功能。主要是给<tr>加上客户端代码,用来调用某个按钮的click事件
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
/**////<summary>
///OnRowDataBound
///</summary>
///<paramname="e"></param>
protectedoverridevoidOnRowDataBound(GridViewRowEventArgse)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271536.gif)
{
if(e.Row.RowType==DataControlRowType.DataRow)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
if(!String.IsNullOrEmpty(RowClickButtonID)||!String.IsNullOrEmpty(RowDoubleClickButtonID))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
//GridViewRow的每个TableCell
foreach(TableCelltcine.Row.Cells)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
//TableCell里的每个Control
foreach(Controlcintc.Controls)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
//如果控件继承自接口IButtonControl
if(c.GetType().GetInterface("IButtonControl")!=null&&c.GetType().GetInterface("IButtonControl").Equals(typeof(IButtonControl)))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
if(!String.IsNullOrEmpty(RowClickButtonID))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
//该按钮的ID等于单击行所对应的按钮ID
if(c.ID==RowClickButtonID)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
//增加行的单击事件,调用客户端脚本,根据所对应按钮的ID执行所对应按钮的click事件
e.Row.Attributes.Add("onclick","javascript:yy_RowClick('"+c.ClientID+"')");
}
}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271596.gif)
if(!String.IsNullOrEmpty(RowDoubleClickButtonID))
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
//该按钮的ID等于双击行所对应的按钮ID
if(c.ID==RowDoubleClickButtonID)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
//增加行的双击事件,调用客户端脚本,根据所对应按钮的ID执行所对应按钮的click事件
e.Row.Attributes.Add("ondblclick","javascript:yy_RowDoubleClick('"+c.ClientID+"')");
}
}
}
}
}
}
}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271596.gif)
base.OnRowDataBound(e);
}
控件使用
添加这个控件到工具箱里,然后拖拽到webform上,要实现行的单击事件则设置RowClickButtonID为行单击事件所对应的按钮的ID,要实现行的双击事件则设置RowDoubleClickButtonID为行双击事件所对应的按钮的ID。
ObjData.cs
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
![](http://www.vs2005.com/DownloadPictures/200709/20070911102715112.gif)
usingSystem.ComponentModel;
![](http://www.vs2005.com/DownloadPictures/200709/20070911102715112.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
/**////<summary>
///OjbData的摘要说明
///</summary>
publicclassOjbData
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271585.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271536.gif)
{
publicOjbData()
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
//
//TODO:在此处添加构造函数逻辑
//
}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271596.gif)
[DataObjectMethod(DataObjectMethodType.Select,true)]
publicDataTableSelect()
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
DataTabledt=newDataTable();
dt.Columns.Add("no",typeof(string));
dt.Columns.Add("name",typeof(string));
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271596.gif)
for(inti=0;i<30;i++)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271545.gif)
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271557.gif)
{
DataRowdr=dt.NewRow();
dr[0]="no"+i.ToString().PadLeft(2,'0');
dr[1]="name"+i.ToString().PadLeft(2,'0');
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271596.gif)
dt.Rows.Add(dr);
}
![](http://www.vs2005.com/DownloadPictures/200709/2007091110271596.gif)
returndt;
}
}
Default.aspx
相关推荐
你需要查阅控件的文档或源代码,了解如何添加和响应相应的事件。 双击编辑更新功能通常涉及到编辑模式的切换。在GridView中,我们可以使用RowEditing、RowUpdating和RowCancelingEdit事件来控制这个过程。用户双击...
GridView 行单击与双击事件,功能:单击选中行 双击打开详细页面 说明:
GridView 控件是 ASP.NET web 应用程序中最常用的数据_grid 控件之一,它提供了强大的功能来显示和编辑数据 Gridview 控件的使用是非常广泛的,特别是在数据展示和编辑方面。 Gridview 控件的基本使用 GridView ...
2. 在GridView的RowDataBound事件中,为该隐藏按钮或链接按钮设置CommandName和CommandArgument属性,以便在后续事件处理中能识别出是哪个行被双击。 3. 配置GridView的OnRowCommand事件,当用户双击行时,对应的...
在GridView控件中查看行的详细信息是一个常见的需求,这通常涉及到数据绑定、模板字段以及事件处理。下面我们将深入探讨如何利用GridView实现这一功能。 首先,我们需要一个数据源来填充GridView。这可以是数据库...
在ASP.NET Web Forms开发中,DataSource控件和GridView控件是两种非常重要的数据展示和管理工具。本篇文章将深入探讨如何使用DataSource控件从数据库获取数据,并将其绑定到GridView控件上,同时实现数据的更新和...
C#操作GridView控件绑定数据实例详解一文的实例代码,包含GridView的全部功能: (1)绑定数据源(List) (2)编辑:修改、更新、取消、删除 (3)搜索查询、翻页、行样式、数据绑定 (4)常见的错误与处理方法
在标题中提到的功能,主要是针对GridView控件的自定义功能扩展,允许用户通过鼠标拖拽的方式来改变数据行的顺序。这个功能对于那些需要频繁调整数据排列顺序的Web应用来说,提供了极大的便利性,减少了后台数据库...
GridView控件是Windows Forms和ASP.NET Web开发中常用的一种数据展示工具,它的核心功能是将数据源中的数据以网格形式进行展示,便于用户查看、编辑和操作数据。在本篇文章中,我们将深入探讨GridView控件的基本用法...
在实际应用中,GridView通常与数据源控件(如SqlDataSource或ObjectDataSource)配合使用,实现数据的动态加载和操作。 二、数据绑定 1. 静态数据绑定:可以直接在设计时通过拖放数据源控件到GridView,然后设置...
GridView 控件可以实现鼠标移到某一行时改变该行的背景色,以便高亮显示当前行数据。例如,可以使用 JavaScript 代码来实现该功能。 7. GridView 实现删除时弹出确认对话框 GridView 控件可以实现删除时弹出确认...
在这个教程中,我们将深入探讨两种常用的数据展示控件:GridView和FormView。 GridView控件是ASP.NET Web Forms中的一种强大工具,它允许开发人员以表格形式轻松地显示数据。GridView非常适合那些需要快速浏览和...
在VS2010中,可以通过拖放功能将GridView控件添加到Web表单中,然后通过属性窗口设置数据源和相关事件。可以为每行添加自定义按钮来触发上移和下移操作。 5. 数据源更新: 在移动行后,确保更新数据源(如SQL ...
GridView控件是 ASP.NET 中常用的数据GridView控件,它提供了丰富的功能来展示和操作数据。在本实例中,我们将展示如何实现GridView控件的排序、分页和编辑功能。 排序功能 GridView控件提供了AllowSorting属性来...
在这个GridView控件中,JavaScript可能被用来处理拖放事件,更新网格布局,并与服务器进行异步通信,如数据的添加、删除和更新。 对于想要进一步修改和定制控件的开发者来说,源码的开放性是一个巨大的优势。你可以...
GridView控件还支持行选择、鼠标悬停等事件,通过处理RowSelected、RowMouseOver等事件,可以实现自定义的交互效果。 9. 自定义样式和模板: 使用CSS类可以定制GridView的样式,使其符合网页的整体设计。...
GridView控件是Windows Forms和ASP.NET中常用的数据显示控件,它提供了一种灵活的方式来展示数据集,如数据库、数组或任何实现了 IEnumerable 接口的数据源。在本教程中,我们将深入探讨GridView控件的核心功能和...
GridView控件是.NET框架中ASP.NET Web Forms的一部分,主要用于展示数据集合,并且允许用户进行排序、分页和编辑数据。这个"GridView控件用法Demo"压缩包提供了一个全面的学习资源,包括各种示例和源代码,对于学习...
总结,"gridview 双击 修改行"涉及的主要知识点包括GridView控件的使用、RowDoubleClick事件的处理、编辑模式的设置以及数据的验证和更新。开发者需要理解这些概念,并能灵活应用到实际项目中,以实现用户友好的数据...