2012-05-03 18 views
0

我有以下colums表:如何检索科拉姆的价值GridView控件

FileID | username | filename 

我使用它有两个colums一个GridView:

FileName | Download

在下载列我有一个名为下载的按钮,将用于下载文件。现在我想要检索fileID或文件名,当我点击下载按钮。

我想这条线得到的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> 

是否有另一种方式做到这一点?

回答

0

这里是我将访问值的列的数据网格

GridView1.Rows[rowId].Cells[columnId].Value 
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); 
+0

1号线提供了以下异常: 无法投类型的对象System.Web.UI.WebControls.GridView为键入“的System.Web.UI .WebControls.GridViewRow”。 – v3z3t4

+0

@ v3z3t4:编辑我的答案。 –