0

ローカル SQL サーバーからデータを取得するグリッドビューがあります。グリッドビューに表示する 3 つの列を選択しました。4 番目の列 (select コマンド) を追加しました。select コマンドをクリックしたときに ID である最初の列からデータを取得したいのですが、常にエラーが発生します。情報: インデックスが範囲外でした. 負でなく、コレクションのサイズより小さくなければなりません."

基本的に、最初の列から ID を取得し、それをセッション変数に割り当ててから 2 番目のページにリダイレクトし、そのセッション変数の内容を使用して別のテキスト ボックスに入力したいと考えています。

    protected void grdClients_RowCommand(object sender, GridViewCommandEventArgs e)
{
      string id = grdClients.Rows[grdClients.SelectedIndex].Cells[0].Text.ToString();
      Session["ID"] = id;
      Response.Redirect("secondPage.aspx");
}

助言がありますか?

ありがとう

4

3 に答える 3

0

1- GridView に属性を追加します

DataKeyNames="aboutusID"

2-テンプレートフィールドを列に追加します

<asp:TemplateField ShowHeader="False">
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" CommandName="SelectSession" Text="EDIT"  CommandArgument='<%# DataBinder.Eval(Container,"RowIndex")%>' ></asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

3-コードビハインド

protected void GridViewAbout_RowCommand(object sender, GridViewCommandEventArgs e)
{
    // this to skip on paging or sorting command
    if (e.CommandName != "Sort" & e.CommandName != "Page")
    {
        // Get the command argument where the index of the clicked button is stored
        int index = Convert.ToInt32(e.CommandArgument);
        // Get the data key of the index where the id is stored
        int id = Convert.ToInt32(GridViewAbout.DataKeys[index].Value);
        if (e.CommandName == "SelectSession")
        {
            // Your Code
        }
    }
}
于 2016-03-02T22:16:05.583 に答える
0

みなさん、ありがとうございます。提供されたすべてのソリューションから断片を取り出して、ソリューションを思いつくことができました。どうもありがとう。

以下は私の解決策です:

 protected void grdClients_RowCommand(object sender, GridViewCommandEventArgs e)
 {

            if (e.CommandName == "Select")
            {

                int index = Convert.ToInt32(e.CommandArgument);
                string id = grdClients.Rows[index].Cells[0].Text.ToString();
                Session["ID"] = id;
                Response.Redirect("secondForm.aspx");
            }
}
于 2016-03-03T16:19:17.580 に答える
0

そのためには SelectedIndexChanged イベントを使用する必要があると思います。
次に、GridviewRow プロパティを選択した行 "GridViewRow 行 = grdClients.SelectedRow;" に割り当てます。

その後、行を使用して最初のセルの値を取得し、それをセッションまたは必要な場所に割り当てることができます。"row.Cells[0].Text;"

    protected void grdClients_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow row = grdClients.SelectedRow;
        string id = row.Cells[0].Text;
        Session["ID"] = id;
        Response.Redirect("secondPage.aspx");
    }
于 2016-03-03T04:15:42.103 に答える