1

私の Web フォームは、2 つの TextBox、2 つの Button、CheckBoxList (データベース クエリの結果にバインド)、および空の DropDownList として開始されます。

ユーザーが最初の TextBox に検索語句を入力して Enter キーを押す (または最初の [検索] ボタンをクリックする) と、GridView が表示され、データベースから取得された行が取り込まれます。ユーザーがいずれかの行で [選択] ボタンをクリックすると、DropDownList が読み込まれ (データベース クエリの結果にバインドされ)、有効になります (クエリが結果を返した場合、結果がなかった場合は無効のままになります)。2 番目のボタン (「設定の保存」) をクリックすると、関連するデータが DB に保存され、GridView の選択がクリアされ、DropDownList がクリアされて無効になります。

上記のすべての作品。問題は DropDownList に由来します。C# コードで SelectedIndex の変化を認識できません。コードをシャッフルする方法に応じて、インデックスは常に 0 (および DropDownList が最初の項目にとどまるように強制される) または -1 (およびリストが無効になる) のいずれかになります。

ドロップダウン リスト コード:

<asp:DropDownList ID="myList" runat="server" AutoPostBack="True" 
    DataTextField="MyName" DataValueField="MyID" 
    Enabled="False" onselectedindexchanged="myList_SelectedIndexChanged" />

C# コード:

protected void myGrid_SelectedIndexChanged(object sender, EventArgs e)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        if (myGrid.SelectedIndex >= 0)
        {
            int id = int.Parse(myGrid.Rows[myGrid.SelectedIndex].Cells[2].Text);
            connection.Open();

            string query = "..."; // Omitted for brevity; the query is correct
            SqlDataSource source = new SqlDataSource(connectionString, query);
            source.SelectParameters.Add("Param1", TypeCode.String, id.ToString());
            DataTable dt = ((DataView)source.Select(DataSourceSelectArguments.Empty)).Table;
            dt.AcceptChanges();
            myList.DataSource = dt;
            myList.DataBind();
            myList.Enabled = myList.Items.Count != 0;

            if (!myList.Enabled)
            {
                myList.Items.Add(new ListItem("No Results", "0"));
            }
        }
    }
}

protected void myList_SelectedIndexChanged(object sender, EventArgs e)
{
    // ((DropDownList)sender).SelectedIndex == -1
}

問題の解決策を探しているときに DropDownList にいくつかの問題があることを読みましたが、AutoPostBack="True" を設定するというメモ以外に、私が見つけた他の状況はどれも役に立ちませんでした。

4

1 に答える 1

2

DropDownList が SelectedIndex 値を失う一般的な理由の 1 つは、ポストバック中にデータに再度バインドされることです。コードの別の場所で DropDownList にデータを入力しますか? GridView の SelectedIndex イベントが再び発生する原因が他にあるのではないでしょうか?

もう 1 つの考えは、DropDownList の Enabled ステータスを変更すると、この動作が発生する可能性があるということです。DropDownList を無効にせずにコードを試し、何かが変わるかどうかを確認してください。

于 2013-10-24T19:43:36.187 に答える