次の列を持つテーブルがあります。
FileID | username | filename
2 つの列を持つ gridview を使用しています。
ファイル名 | ダウンロード
ダウンロード列には、ファイルをダウンロードするために使用される Download というボタンがあります。ダウンロードボタンをクリックしたときに、ファイル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>
これを行う別の方法はありますか?