技术开发 频道

扩展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
                        );
                }

            }

        }


0
相关文章