从 Gridview 的 BoundField 访问数据

Moh*_*eem 1 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>
Run Code Online (Sandbox Code Playgroud)

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

bla*_*bla 5

这段代码应该可以工作,在我的本地测试。

首先,将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>
Run Code Online (Sandbox Code Playgroud)

然后,从代码隐藏访问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);
    }
}
Run Code Online (Sandbox Code Playgroud)