• 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告诉后台。



  • 相关阅读:
    微信公众平台消息接口开发(32)空气质量指数查询
    微信公众平台消息接口开发(33)智能快递查询
    微信公众平台消息接口开发(34)桃花运测试
    微信5.0体验贴:即将横“扫”一切
    微信官方首次表态:微信公众平台不是营销工具
    微信公众平台消息接口开发(34)微信墙
    微信 5.0 内部测试版下载地址
    PHP和MySQL Web开发 经典书籍
    字符数组在C++、C#等语言中的操作
    CF555B 贪心
  • 原文地址:https://www.cnblogs.com/JHelius/p/14318933.html
Copyright © 2020-2023  润新知