0

我有一个包含以下列的表:

FileID | username | filename

我正在使用一个有两个列的gridview:

文件名 | 下载

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

我试过这条线来获取文件ID,但它给出了一个错误:

int FileID = (int)GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value;

错误:System.ArgumentOutOfRangeException 未被用户代码处理 Message=Index 超出范围。必须是非负数且小于集合的大小。

这是我的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>

还有另一种方法可以做到这一点吗?

4

2 回答 2

1

您可以使用您的第一个BoundField来获得fileid

GridViewRow row = (GridViewRow)((Control)sender).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);

编辑:当您处理 GridView 的RowCommand事件时,上面的代码不起作用,因为它sender是 GridView 而不是 Button。然后您会在以下位置找到您的 Button GridViewCommandEventArgs.CommandSource

GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);
于 2012-05-03T14:43:54.187 回答
0

这是我如何访问数据网格内的列中的值

GridView1.Rows[rowId].Cells[columnId].Value 
于 2012-05-03T14:40:39.320 回答