如何在GridView中检索列的值

时间:2012-05-03 14:35:21

标签: c# asp.net gridview

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

FileID | username | filename

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

  

FileName |下载

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

我尝试使用此行来获取fileid但是它出错了:

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

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

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

还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

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

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

编辑:当您处理GridView的RowCommand事件时,上述代码无效,因为sender是GridView而不是Button。然后你会在GridViewCommandEventArgs.CommandSource

中找到你的按钮
GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);

答案 1 :(得分:0)

以下是我将如何访问datagrid

中的列中的值
GridView1.Rows[rowId].Cells[columnId].Value