源文轉自:http://www.cnblogs.com/heekui/archive/2008/04/09/1143831.html
很多時候我們需要在GridView的RowCommand之類的事件中需要獲取當前行的一些關聯性的數據值。但這些數據值又沒有直接體現在GridView的列中。這個時候該怎麼辦呢?
有同學喜歡用隱藏列的方式,把需要使用但不顯示的字段綁定到此列上,同時設置列寬爲0或不顯示,使用時可以用常規的取某行某列的方式來獲取數據。
但是在Framework 2.0中,我們可以採用DataKeyNames的方式來獲取此類數據。
代碼示例:
(前臺)
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("GrupName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField Text="按鈕" />
</Columns>
</asp:GridView>
Grup 爲我們想使用但不需要顯示的列。(如果有多個字段,使用逗號分開)
(後臺)
{
if (!IsPostBack )
{
DataTable dt = new DataTable();
dt.Columns.Add("Grup");
dt.Columns.Add("GrupName");
dt.Rows.Add(new object[] { 0,"營業部" });
dt.Rows.Add(new object[] { 1,"市場部" });
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
// 獲取當前行索引
int index = Convert.ToInt32(e.CommandArgument);
// 取出當前行數據鍵值對象中的值
string strGrup = ((GridView)sender).DataKeys[index].Values["Grup"].ToString();
}
順便補充一句。
如果你使用模板列中放置按鈕控件的方式,要想在按鈕事件中獲取這種字段值就更簡單了。
只需要在按鈕的CommandArgument屬性設置爲想綁定的字段,如:
<ItemTemplate>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" CommandArgument=' <%#Eval("Grup") %>' />
</ItemTemplate>
</asp:TemplateField>
按鈕事件中如是寫:
{
string strGrup = ((Button)sender).CommandArgument.ToString();
}