从Gridview的BoundField访问数据

时间:2010-10-25 13:01:32

标签: c# asp.net

我有像这样的GridView

<asp:GridView ID="gv_FilesList" runat="server" AutoGenerateColumns="false" onrowcommand="gv_FilesList_RowCommand">
  <Columns>
    <asp:BoundField DataField="f_Id" Visible="false" HeaderText="File Name" />
  </Columns>  
  <Columns>
   <asp:BoundField DataField="f_Name" HeaderText="File Name" />
  </Columns>                                      
  <Columns>
    <asp:ButtonField ButtonType="Link" Text="Download" CommandName="DownloadFile" HeaderText="Download" />
  </Columns>
</asp:GridView>

现在,当我点击下载按钮时,如何获取相应的f_Id以便从数据库中获取相关数据。

3 个答案:

答案 0 :(得分:4)

此代码应该可以在我当地进行测试。

首先,将DataKeyNames添加到GridView。

<asp:GridView ID="gv_FilesList" runat="server" AutoGenerateColumns="false" onrowcommand="gv_FilesList_RowCommand" DataKeyNames="f_Id">
  <Columns>
    <asp:BoundField DataField="f_Id" Visible="false" HeaderText="File Name" />
  </Columns>  
  <Columns>
   <asp:BoundField DataField="f_Name" HeaderText="File Name" />
  </Columns>                                      
  <Columns>
    <asp:ButtonField ButtonType="Link" Text="Download" CommandName="DownloadFile" HeaderText="Download" />
  </Columns>
</asp:GridView>

然后,从代码隐藏中访问DataKeys

protected void gv_FilesList_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "DownloadFile")
    {
        //row index
        int index = Convert.ToInt32(e.CommandArgument);

        //retrieve f_Id    
        int f_Id = Convert.ToInt32(gv_FilesList.DataKeys[index].Value);

        //download file with f_Id
        DownloadFile(f_Id);
    }
}

答案 1 :(得分:2)

可以通过以下几种方式对其进行处理:

void gv_FilesList_RowCommand(Object sender, GridViewCommandEventArgs e) {
   if(e.CommandName=="DownloadFile")
     int index = Convert.ToInt32(e.CommandArgument);
     GridViewRow row = gv_FilesList.Rows[index];
     string fileDownloadId = row.Cells[1].Text;
     //Pull from DB
}

然后将f_id添加到DataKeyNames属性中,以便存储隐藏字段值。

<asp:GridView ID="gv_FilesList" runat="server" AutoGenerateColumns="false" onrowcommand="gv_FilesList_RowCommand" DataKeyNames="f_id">

DataKeyNames

答案 2 :(得分:0)

in this thread描述了您的问题的解决方案。 基本上,您可以在名为CommandArgument的事件参数属性中访问行索引。