很多时候我们需要在
GridView的RowCommand之类的事件中需要获取当前行的一些关联性的数据值。但这些数据值又没有直接体现在GridView的列中。这个时候该怎么办呢?
有同学喜欢用隐藏列的方式,把需要使用但不显示的字段绑定到此列上,同时设置列宽为0或不显示,使用时可以用常规的取某行某列的方式来获取数据。
但是在Framework 2.0中,我们可以采用DataKeyNames的方式来获取此类数据。
代码示例:
(前台)
(后台)
有同学喜欢用隐藏列的方式,把需要使用但不显示的字段绑定到此列上,同时设置列宽为0或不显示,使用时可以用常规的取某行某列的方式来获取数据。
但是在Framework 2.0中,我们可以采用DataKeyNames的方式来获取此类数据。
代码示例:
(前台)
<
asp:GridView ID
=
"
GridView1
"
runat
=
"
server
"
DataKeyNames
=
"
Grup
"
OnRowCommand
=
"
GridView1_RowCommand
"
AutoGenerateColumns
=
"
False
"
>
< 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 为我们想使用但不需要显示的列。(如果有多个字段,使用逗号分开)
< Columns >
< asp:TemplateField >
< ItemTemplate >
< asp:Label ID = " Label1 " runat = " server " Text = ' <%#Eval("GrupName") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
< asp:ButtonField Text = " 按钮 " />
</ Columns >
</ asp:GridView >
(后台)
protected
void
Page_Load(
object
sender, EventArgs e)
{
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();
}
{
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属性设置为想绑定的字段,如:
<
asp:TemplateField
>
< ItemTemplate >
< asp:Button ID ="Button2" runat ="server" OnClick ="Button2_Click" Text ="Button" CommandArgument =' <%#Eval("Grup") % > ' />
</ ItemTemplate >
</ asp:TemplateField >
< ItemTemplate >
< asp:Button ID ="Button2" runat ="server" OnClick ="Button2_Click" Text ="Button" CommandArgument =' <%#Eval("Grup") % > ' />
</ ItemTemplate >
</ asp:TemplateField >
按钮事件中如是写:
protected
void
Button2_Click(
object
sender, EventArgs e)
{
string strGrup = ((Button)sender).CommandArgument.ToString();
}
{
string strGrup = ((Button)sender).CommandArgument.ToString();
}