C# 如何在GridView中检索列的值

C# 如何在GridView中检索列的值,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一张桌子,上面有以下几根柱子: 我使用的gridview有两个柱: 文件名|下载 在下载栏中,我有一个名为下载的按钮,用于下载文件。现在我想在单击下载按钮时检索文件ID或文件名 我尝试此行获取文件ID,但它给出了一个错误: int FileID = (int)GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value; 错误: 用户代码未处理System.ArgumentOutOfRangeException Message=索

我有一张桌子,上面有以下几根柱子:

我使用的gridview有两个柱:

文件名|下载

在下载栏中,我有一个名为下载的按钮,用于下载文件。现在我想在单击下载按钮时检索文件ID或文件名

我尝试此行获取文件ID,但它给出了一个错误:

int FileID = (int)GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value;
错误: 用户代码未处理System.ArgumentOutOfRangeException Message=索引超出范围。必须为非负数且小于集合的大小

以下是我的aspx页面代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="filelist" 
    Width="404px" onrowcommand="GridView1_RowCommand" Height="131px">
    <Columns>
        <asp:BoundField DataField="fileid" HeaderText="fileid" InsertVisible="False" 
            ReadOnly="True" SortExpression="fileid" Visible="False" />
        <asp:BoundField DataField="userid" HeaderText="userid" SortExpression="userid" 
            Visible="False" />
        <asp:BoundField DataField="filename" HeaderText="FileName" 
            SortExpression="filename" />
        <asp:ButtonField HeaderText="Download" Text="Download" CommandName="download"/>
    </Columns>
</asp:GridView>


<asp:SqlDataSource ID="filelist" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT * FROM [FileDetails] WHERE ([userid] = @userid)">
    <SelectParameters>
        <asp:SessionParameter Name="userid" SessionField="userid" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>


还有其他方法吗?

下面是如何访问数据网格中列中的值

GridView1.Rows[rowId].Cells[columnId].Value 

您可以使用第一个
BoundField
获取
fileid

GridViewRow row = (GridViewRow)((Control)sender).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);
编辑:处理GridView的
行命令
事件时,上述代码不起作用,因为
发送方
是GridView而不是按钮。然后,您将在以下位置找到您的按钮:


第1行出现以下异常:无法将“System.Web.UI.WebControl.GridView”类型的对象强制转换为“System.Web.UI.WebControl.GridViewRow”类型。
GridViewRow row = (GridViewRow)((Control)sender).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);
GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);