GridView中使用DataKeyNames存储数据键值

    技术2026-09-20  14

    源文转自:http://www.cnblogs.com/heekui/archive/2008/04/09/1143831.html

     

          很多时候我们需要在GridView的RowCommand之类的事件中需要获取当前行的一些关联性的数据值。但这些数据值又没有直接体现在GridView的列中。这个时候该怎么办呢?有同学喜欢用隐藏列的方式,把需要使用但不显示的字段绑定到此列上,同时设置列宽为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 为我们想使用但不需要显示的列。(如果有多个字段,使用逗号分开)(后台)

         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();      }

    顺便补充一句。如果你使用模板列中放置按钮控件的方式,要想在按钮事件中获取这种字段值就更简单了。 只需要在按钮的CommandArgument属性设置为想绑定的字段,如:

    < 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(); }  
    最新回复(0)