摘要:[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」「某格子內容」都可以取到了
●Yahoo關鍵字廣告/原生廣告
◆Yahoo廣告方案介紹 : https://goo.gl/5k8FHW
◆Yahoo廣告剖析與運用 : http://goo.gl/4xjUJD