1

私の ASP Web サイトには 2 つのドロップダウン リストがあります。最初のドロップダウン リストにはユーザーが選択する 4 つのオプションがあり、これに基づいて 2 番目のドロップダウン リストには、選択したデータベース列のデータが入力されます。これらのリストを、データ ソースを介してバインドするのではなく、プログラムで入力しようとしています。

私が現在持っているコードには2つの問題があります:

1. 'onselectedIndex changed' メソッド内で、ドロップダウン リストの最初の要素をクリックしたい場合、イベントをトリガーできません。別の項目をクリックしてから、最初の項目もトリガーするためにもう一度クリックする必要があります。AutoPostBack を true に設定しています

2. イベントがトリガーされると、データベース データは 2 番目のドロップダウン リストに入力されません。データセットの正しい量の行が正しく入力されますが、データは表示されません。

最初のドロップダウン リストから最初の要素、つまり「coffee Name」が選択されると、2 番目のリストに正しい行番号、つまり 3 が入力されますが、正しいデータは入力されません。

現在のコード:

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string option = DropDownList1.SelectedValue;
        // If the selected element is 'Coffee Name' run the method.
        if (option == "Coffee Name")
        {
            bindCoffeeNames();
        }
    }



    private void bindCoffeeNames()
    {
        Query the DB and bind the data to the second dropdown list.
        SqlConnection sqlcon = new SqlConnection(connstring);
        SqlCommand sqlcmd = new SqlCommand("select coffeeName from Coffees ORDER BY coffeeName ASC", sqlcon);
        SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
        DataSet ds = new DataSet();
        adp.Fill(ds);
        DropDownList2.DataSource = ds.Tables[0];
        DropDownList2.DataBind();

    }
4

1 に答える 1

0
  1. 自動ポストバックは変更時にのみ発生します。デフォルトのプレースホルダーをドロップダウンリストに挿入したい
    。次のようなコードで実行できます。

    dropdownlist1.Items.Insert(0, new ListItem("Select an item", String.Empty));
    dropdownlist1.SelectedIndex = 0;  
    

    またはマークアップで:

     <asp:DropDownList ID="ddlPersons" runat="server" AppendDataBoundItems="true" DataValueField="ID" DataTextField="Name">
    <asp:ListItem> -- please select person -- </asp:ListItem>
    </asp:DropDownList>
    
  2. 次の行を bindCoffeeNames に追加します。

    DropDownList2.DataTextField = "coffeeName";

また、DataValueField指定することをお勧めします (クエリも返すように変更する必要がありますCoffeeIdが、必須ではありません)。

于 2013-03-21T00:34:49.220 に答える