我有一张包含以下列的表:
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>
还有其他办法吗?
答案 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