给GridView双击,单击行事件

本文介绍如何在 ASP.NET 的 GridView 和 DataGrid 控件中处理行的单击和双击事件,通过 JavaScript 延迟触发单击事件并使用辅助按钮实现 DataGrid 的双击响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

protected override void Render(HtmlTextWriter writer)
    {
        
// GridView
        foreach (GridViewRow row in GridView1.Rows) {
            
if (row.RowState == DataControlRowState.Edit) { // 编辑状态
                row.Attributes.Remove("onclick");
                row.Attributes.Remove(
"ondblclick");
                row.Attributes.Remove(
"style");
                row.Attributes[
"title"= "编辑行";
                
continue;
            }
            
if (row.RowType == DataControlRowType.DataRow) {
                
// 单击事件,为了响应双击事件,需要延迟单击响应,根据需要可能需要增加延迟
                // 获取ASP.NET内置回发脚本函数,返回 __doPostBack(<<EventTarget>>, <<EventArgument>>)
                // 可直接硬编码写入脚本,不推荐                
                row.Attributes["onclick"= String.Format("javascript:setTimeout(/"if(dbl_click){{dbl_click=false;}}else{{{0}}};/", 1000*0.3);", ClientScript.GetPostBackEventReference(GridView1, "Select$" + row.RowIndex.ToString(), true));
                
// 双击,设置 dbl_click=true,以取消单击响应
                row.Attributes["ondblclick"= String.Format("javascript:dbl_click=true;window.open('DummyProductDetail.aspx?productid={0}');", GridView1.DataKeys[row.RowIndex].Value.ToString());
                
//
                row.Attributes["style"= "cursor:pointer";
                row.Attributes[
"title"= "单击选择行,双击打开详细页面";
            }
        }

        
// DataGrid
        foreach (DataGridItem item in DataGrid1.Items) {
            
if (item.ItemType == ListItemType.EditItem) {
                item.Attributes.Remove(
"onclick");
                item.Attributes.Remove(
"ondblclick");
                item.Attributes.Remove(
"style");
                item.Attributes[
"title"= "编辑行";
                
continue;
            }
            
if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) {
                
//单击事件,为了响应双击事件,延迟 1 s,根据需要可能需要增加延迟
                // 获取辅助的支持回发按钮
                // 相对而言, GridView 支持直接将 CommandName 作为 <<EventArgument>> 故不需要辅助按钮
                Button btnHiddenPostButton = item.FindControl("btnHiddenPostButton") as Button;
                item.Attributes[
"onclick"= String.Format("javascript:setTimeout(/"if(dbl_click){{dbl_click=false;}}else{{{0}}};/", 1000*0.3);", ClientScript.GetPostBackEventReference(btnHiddenPostButton, null));                
                
// 双击
                // 双击,设置 dbl_click=true,以取消单击响应
                item.Attributes["ondblclick"= String.Format("javascript:dbl_click=true;window.open('DummyProductDetail.aspx?productid={0}');", DataGrid1.DataKeys[item.ItemIndex].ToString());
                
                
//
                item.Attributes["style"= "cursor:pointer";
                item.Attributes[
"title"= "单击选择行,双击打开详细页面";
            }
        }

        base.Render(writer);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值