zoukankan      html  css  js  c++  java
  • asp.net实现 gridview 鼠标单击任意字段选中一行 ,并获取数据 Hi

    目标:

    我们要实现 鼠标在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.csdn.net/yueguangzhiyuan/article/details/8926131



    深入:

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

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

    为什么绕这么一大圈?

    因为:

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



  • 相关阅读:
    任意文件读取与下载漏洞
    命令执行与代码执行漏洞原理
    安全面试知识汇总
    科学使用Github(gayhub)搜索想要的项目
    业务逻辑漏洞--注册-登录-改密码页面总结
    Linux提权之SUID提权
    攻防世界XCTF--伪造请求头XFF和Referer(第九题)
    攻防世界XCTF--两种传输方式get_post(第八题)
    攻防世界XCTF--一个简单的PHP后端验证(第七题)
    课时14.DTD文档声明上(掌握)
  • 原文地址:https://www.cnblogs.com/JHelius/p/14318933.html
Copyright © 2011-2022 走看看