asp.Net実装gridviewマウス任意のフィールドをクリックして1行選択し、データを取得

2837 ワード

ターゲット:
マウスがgridviewで任意のフィールドをクリックして行を選択し、その行のデータを取得することを実現します.
手順:
1.gridview(名前GV_1)を作成し、GV_1でLinkButtonを作成し、CommandNameをalarmLinkButtonに設定します.
                
                    
                        
                    
                
2.フロントでJSイベントを作成します.このJsイベントは、行をクリックするとトリガーされます
        
        		          function ButtonClickEvent(cid) {
        	                         var btn = document.getElementById(cid);
           		          if (btn != null) {
                	                     btn.click();
           	                 }
       	                         }
    		        
  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
詳細:
さっきの手順をまとめると、目標を達成するために複雑な処理が行われていることに気づくかもしれません.
全体の流れは大体このようです:マウスは1つのRowをクリックします”はこのRowのJSの書いたonclick事件をトリガします”はこの行のLinkButtonをトリガしますイベントをクリックします(すべての行はすべて1つのLinkButtonがあります)”はGridviewのRowCommand事件をトリガします”は行のデータを取得します
どうしてこんなに大回りしますか.
理由:
前楽屋の区別がある.私たちはフロントからバックグラウンドに伝えなければなりません.私は1行を選んだので、それ自体は簡単です.でも残念なのはASpです.NetでGridviewのGenerateSelectButtonを使わない限り、難しいです.しかし、これを使用するには、選択した行を実現するには、「選択」というフィールドをクリックする必要があります.だからJSを利用して楽屋に伝えるしかない.