asp.net实现 gridview 鼠标单击任意字段选中一行 ,并获取数据

本文详细介绍了如何在ASP.NET GridView中实现鼠标点击任意字段即可选中一行并获取该行数据的过程,通过创建LinkButton、添加JS事件、设置RowDataBound和RowCommand事件等步骤来实现这一功能。文章深入分析了实现过程中的复杂性及原因,并提供了关键代码段以供参考。

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

目标:

我们要实现 鼠标在gridview上单击任意字段就选中一行,并获取该行数据

步骤:

1.创建gridview(起名GV_1),在GV_1中创建LinkButton(起名lbtnSelected),将CommandName设为alarmLinkButton

                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:LinkButton ID="lbtnSelected" runat="server" CommandName="alarmLinkButton" 
                            ShowSelectButton="False" />
                    </ItemTemplate>
                </asp:TemplateField>
2.在前台创建JS事件。该Js事件,当鼠标单击某行后触发

        <script language="javascript">
        		          function ButtonClickEvent(cid) {
        	                         var btn = document.getElementById(cid);
           		          if (btn != null) {
                	                     btn.click();
           	                 }
       	                         }
    		        </script>


  3.在GV_1的RowDataBound事件中创建如下代码:

	protected void GV_1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {    
                e.Row.Attributes.Add("onclick", "ButtonClickEvent('" + e.Row.FindControl("lbtnSelected").ClientID + "')");//为每行添加刚刚写的JS单击事件

                ((LinkButton)e.Row.FindControl("lbtnSelected")).CommandArgument = e.Row.RowIndex.ToString();//获取当前行号,用CommandArgument记录该数据 

            }
        }
4.在GV_1的RowCommand事件中加如下代码。JS中的click事件会触发该事件


protected void GV_1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "alarmLinkButton")
            {
                GridViewRow row = null;
                System.Reflection.FieldInfo fRow = e.GetType().GetField("_row", BindingFlags.Instance | BindingFlags.NonPublic);
                row = fRow.GetValue(e) as GridViewRow;//该方法获取非公共成员变量
                if (row != null)
                {
                   //这里进行你要的操作,可以对获取的row数据进行使用
                }
                //GV_1.SelectedIndex = int.Parse(e.CommandArgument.ToString());//你也可以利用刚刚获取的行号进行你要的操作(CommandArgument里的数据是自定义的备选参数,在这里我们加入的是行号rowindex)
            }
        }

PS:在上面的RowComman事件中,我们用特殊手法获取了行的整条数据。关于如何获取非公共成员变量:http://blog.youkuaiyun.com/yueguangzhiyuan/article/details/8926131



深入:

总结刚刚的步骤,你可能不难发现,我们为了实现目标进行了复杂的处理。

整个流程大概是这样:鼠标单击一个Row》触发该Row的JS所写的onclick事件》触发该行LinkButton单击事件(每行都有一个LinkButton)》触发Gridview的RowCommand事件》获取行的数据

为什么绕这么一大圈?

因为:

有前后台之分。我们要从前台告诉后台,我选中了一行,本身很简单。但是可惜的是在ASp.Net里除非用Gridview的GenerateSelectButton,不然很难。但是用它的话,我们必须单击“选中”这个字段才能实现选中行。所以只能利用JS告诉后台。



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值