扩展GridView控件-响应鼠标的操作
[IT168 技术文档]扩展GridView控件(六)——数据行响应鼠标的单击和双击事件
作者:webabcd
介绍
为了让GridView的数据行可以响应鼠标的单击和双击事件,一般我们会在GridView的RowDataBound事件中给<tr>加上客户端代码,为了简化这个步骤,我们来扩展一下它。
控件开发
1、新建一个继承自GridView的类。

/**//// <summary>
/// 继承自GridView
/// </summary>
[ToolboxData(@"<{0}:SmartGridView runat='server'></{0}:SmartGridView>")]
public class SmartGridView : GridView


{
}
2、加两个属性,分别是单击行事件所对应的按钮的ID和双击行事件所对应的按钮的ID
private string _rowClickButtonID;

/**//// <summary>
/// 单击行事件所对应的按钮的ID
/// </summary>
[Description("单击行事件所对应的按钮的ID"), DefaultValue(""), Category("扩展")]
public virtual string RowClickButtonID

{

get
{ return _rowClickButtonID; }

set
{ _rowClickButtonID = value; }
}

private string _rowDoubleClickButtonID;

/**//// <summary>
/// 双击行事件所对应的按钮的ID
/// </summary>
[Description("双击行事件所对应的按钮的ID"), DefaultValue(""), Category("扩展")]
public virtual string RowDoubleClickButtonID

{

get
{ return _rowDoubleClickButtonID; }

set
{ _rowDoubleClickButtonID = value; }
}
3、新建一个JavaScriptConstant类,把我们要用到的javascript存在一个常量里
using System;
using System.Collections.Generic;
using System.Text;

namespace YYControls.SmartGridView


{

/**//// <summary>
/// javascript
/// </summary>
public class JavaScriptConstant

{
internal const string jsClickAndDoubleClick = @"<script type=""text/javascript"">
//<![CDATA[
var isDoubleClick = false;
function yy_RowClick(id)
{
setTimeout(""yy_RowClickTimeout('""+id+""')"", 300);
}
function yy_RowClickTimeout(id)
{
if (isDoubleClick == false)
{
// 执行ID所指按钮的click事件
document.getElementById(id).click();
}
isDoubleClick = true;
}
function yy_RowDoubleClick(id)
{
if (isDoubleClick == true)
{
// 执行ID所指按钮的click事件
document.getElementById(id).click();
}
isDoubleClick = true;
}
//]]>
</script>";
}
}
4、重写OnPreRender方法,注册上面那段客户端脚本

/**//// <summary>
/// OnPreRender
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)

{
base.OnPreRender(e);

if (!String.IsNullOrEmpty(RowClickButtonID) || !String.IsNullOrEmpty(RowDoubleClickButtonID))

{
if (!Page.ClientScript.IsClientScriptBlockRegistered("jsClickAndDoubleClick"))

{
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"jsClickAndDoubleClick", JavaScriptConstant.jsClickAndDoubleClick
);
}
}
}
作者:webabcd
介绍
为了让GridView的数据行可以响应鼠标的单击和双击事件,一般我们会在GridView的RowDataBound事件中给<tr>加上客户端代码,为了简化这个步骤,我们来扩展一下它。
控件开发
1、新建一个继承自GridView的类。

/**//// <summary>
/// 继承自GridView
/// </summary>
[ToolboxData(@"<{0}:SmartGridView runat='server'></{0}:SmartGridView>")]
public class SmartGridView : GridView

{
}2、加两个属性,分别是单击行事件所对应的按钮的ID和双击行事件所对应的按钮的ID
private string _rowClickButtonID;
/**//// <summary>
/// 单击行事件所对应的按钮的ID
/// </summary>
[Description("单击行事件所对应的按钮的ID"), DefaultValue(""), Category("扩展")]
public virtual string RowClickButtonID
{
get
{ return _rowClickButtonID; }
set
{ _rowClickButtonID = value; }
}
private string _rowDoubleClickButtonID;
/**//// <summary>
/// 双击行事件所对应的按钮的ID
/// </summary>
[Description("双击行事件所对应的按钮的ID"), DefaultValue(""), Category("扩展")]
public virtual string RowDoubleClickButtonID
{
get
{ return _rowDoubleClickButtonID; }
set
{ _rowDoubleClickButtonID = value; }
}3、新建一个JavaScriptConstant类,把我们要用到的javascript存在一个常量里
using System;
using System.Collections.Generic;
using System.Text;
namespace YYControls.SmartGridView

{
/**//// <summary>
/// javascript
/// </summary>
public class JavaScriptConstant
{
internal const string jsClickAndDoubleClick = @"<script type=""text/javascript"">
//<![CDATA[
var isDoubleClick = false;
function yy_RowClick(id)
{
setTimeout(""yy_RowClickTimeout('""+id+""')"", 300);
}
function yy_RowClickTimeout(id)
{
if (isDoubleClick == false)
{
// 执行ID所指按钮的click事件
document.getElementById(id).click();
}
isDoubleClick = true;
}
function yy_RowDoubleClick(id)
{
if (isDoubleClick == true)
{
// 执行ID所指按钮的click事件
document.getElementById(id).click();
}
isDoubleClick = true;
}
//]]>
</script>";
}
}
4、重写OnPreRender方法,注册上面那段客户端脚本

/**//// <summary>
/// OnPreRender
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (!String.IsNullOrEmpty(RowClickButtonID) || !String.IsNullOrEmpty(RowDoubleClickButtonID))
{
if (!Page.ClientScript.IsClientScriptBlockRegistered("jsClickAndDoubleClick"))
{
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"jsClickAndDoubleClick", JavaScriptConstant.jsClickAndDoubleClick
);
}
}
}
0
相关文章