[ASP.NET][Gridview](note)取得該列值、主key、取該格內容的問題

摘要:[ASP.NET]Gridview取得該列值、主key、取該格內容的問題

想要取得gridview中某一個格子的文字填入gridview外的textbox或做為他用,

基本上可以先把想取值的該格子的欄位轉成樣板再使用findcontrol[ ], 

但我的gridview是使用ADO.net來取得資料的,沒有搭配sqldatasource控制項,

故無法替每個資料欄位先轉成樣板,當然就無法使用findcontrol[ ], 

故我想取得某列某格子內的文字就得採用另一種方式。

須取先取得該被點擊列的「第幾行」或取得「主key」以做增刪修的依據,

然後再使用GridView1.Rows[e.NewSelectedIndex].Cells[1].Text;

即可取得該欄該格的文字了。

說明:

在gridview中我們可以利用內建的「選取」鍵、或是自訂buttton來觸發被選取該列時的事件。

首先了解一下面的幾種按鈕:

要注意的是:
上述三種自訂按鈕有BoundField、TemplateField、BottonField,
       是三種不同形式來加入自訂按鈕的,
       且都有分別設定自己的commandname, 
       但唯有在TemplateField的自訂按鈕中,須在HTML中插入「Gridview的流水號」,
       加入這一行 CommandArgument='<%# Container.DataItemIndex %>'
       才能正確取到e.CommandArgument的值,否則網頁執行會報錯。
      範例如下:


<ItemTemplate> 
            <asp:Button ID="Button2" runat="server" CommandName="myy" 
                Text="myy" CommandArgument='<%# Container.DataItemIndex %>'/> 
     </ItemTemplate>

(Gridview的流水號可參考mis2000的專欄說明http://www.dotblogs.com.tw/mis2000lab/archive/2011/11/05/gridview_container_dataitemindex.aspx)

 

再來就是程式碼:

selectedIndexChanged 事件:
 


    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
 Response.Write("== GridView1_SelectedIndexChanged() ==");
 Response.Write("GridView1.SelectedIndex--  " + GridView1.SelectedIndex);
 Response.Write("GridView1.SelectedValue-- " + GridView1.SelectedValue);
 Response.Write("GridView1.SelectedDataKey.Value-- " + GridView1.SelectedDataKey.Value);

int i = Convert.ToInt32(GridView1.SelectedIndex);
     
      //某資料欄位已轉成樣板才能抓取ID, 在此為Label1
      Label tb3 = (Label)GridView1.Rows[i].FindControl("Label1");
      Label4.Text = tb3.Text.ToString();//要顯示在TextBox中,沒加.Text就會報錯
      TextBox3.Text = tb3.Text; //要顯示在TextBox中,若加了ToString()就會報錯

      //某資料欄位"不"轉成樣板的取值
     Label5.Text = GridView1.Rows[i].Cells[6].Text;
     TextBox2.Text = GridView1.Rows[i].Cells[6].Text;

    }

Rowcommand事件:


 protected void GridView1_RowCommand1(object sender, GridViewCommandEventArgs e)
    {
 Response.Write("e.CommandName = " + e.CommandName+"</br>");

        if (e.CommandName == "mys")
        {
            
            int i = Convert.ToInt32(e.CommandArgument);

            Response.Write("e.CommandArgument=" + i");
            Response.Write("第" + i + "列" + "第6格是---" + GridView1.Rows[i].Cells[6].Text");
            Response.Write( "主key是 ="+GridView1.DataKeys[i].Value.ToString());   
        }
        if (e.CommandName == "myy")
        {
           
            int i = Convert.ToInt32(e.CommandArgument);

            Response.Write("e.CommandArgument=" + i);
            Response.Write("第" + i + "列" + "第6格是---" + GridView1.Rows[i].Cells[6].Text");
            Response.Write("主key是 =" + GridView1.DataKeys[i].Value.ToString());

        }
        if (e.CommandName == "my")
        {
         
          int i = Convert.ToInt32(e.CommandArgument);

            Response.Write("e.CommandArgument=" + i");
            Response.Write("第" + i + "列" + "第6格是---" + GridView1.Rows[i].Cells[6].Text");
            Response.Write("主key是 =" + GridView1.DataKeys[i].Value.ToString());

        }

    }

然後就預覽網頁並點擊任一列的按鈕,
會有下列頁面的效果,每列的「第幾列」「主key」「某格子內容」都可以取到了

 
--
強烈建議購物網店或實體店家都必須使用關鍵字廣告or原生廣告來將Yahoo上與聯播網的廣大流量導至自己的網站!

●Yahoo關鍵字廣告/原生廣告
◆Yahoo廣告方案介紹 : https://goo.gl/5k8FHW
◆Yahoo廣告剖析與運用 : http://goo.gl/4xjUJD

 

​​