0

次の列を持つテーブルがあります。

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>

これを行う別の方法はありますか?

4

2 に答える 2

1

BoundField最初に使用して次を取得できますfileid

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

編集: GridView のイベントを処理している場合、ボタンではなく GridView であるRowCommandため、上記のコードは機能しません。sender次に、次の場所にボタンがありますGridViewCommandEventArgs.CommandSource

GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);
于 2012-05-03T14:43:54.187 に答える
0

データグリッド内の列の値にアクセスする方法は次のとおりです

GridView1.Rows[rowId].Cells[columnId].Value 
于 2012-05-03T14:40:39.320 に答える