C# 如何在GridView中检索列的值
我有一张桌子,上面有以下几根柱子: 我使用的gridview有两个柱: 文件名|下载 在下载栏中,我有一个名为下载的按钮,用于下载文件。现在我想在单击下载按钮时检索文件ID或文件名 我尝试此行获取文件ID,但它给出了一个错误: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=索
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);