-3

重複の可能性:
ドロップダウンリストに DB 値を表示する

DB 値を取得し、ドロップダウン リストに表示しています。国と州のドロップダウン リストがあります。

DropDownList1.Items.Add(new ListItem(Session["country"].ToString()));
DropDownList2.Items.Add(new ListItem(Session["state"].ToString()));

DDL で DB 値を表示できません。状態のドロップダウン リストで --select a state-- を取得しています ドロップダウン リストに DB 値を表示するにはどうすればよいですか?

<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True">
    <asp:ListItem Value="Select a state" >Select a state</asp:ListItem>
    <asp:ListItem Value="value 1" >Maharastra</asp:ListItem>
    <asp:ListItem Value="value 2" >Goa</asp:ListItem>
    <asp:ListItem Value="value 3" >Kashmir</asp:ListItem>
</asp:DropDownList>

ここで DB 値をキャッチして、次のページに送信しています

  if (dt.Rows.Count > 0)
            {
                DataTable dt1 = new DataTable();
                dt1 = bll.getnewid(TextBox1.Text);

                    if (dt1.Rows.Count > 0)
                    {

                        Session["country"] = dt1.Rows[0]["Country"].ToString();
                        Session["state"] = dt1.Rows[0]["State"].ToString();
4

3 に答える 3

4

まあ、どうにかして ddlist を db の結果にバインドする必要があります。次のようになります。

ddlist1.DataSource = MyDBAccessClass.GetSomeValues();
ddlist1.DataBind();

より多くのコメントに基づいて... 少しルーレットをプレイして、あなたの意図が何であるかを推測する必要があります. あなたのコードには複数の問題があり、明らかに自分自身を説明するいくつかの問題があります。

私の理解が正しければ、2 つのドロップダウンリストがあります。1 つに国を入力し、選択に基づいて 2 番目のドロップダウンリストに入力します。

基本原則は次のようになります。

DataAccessClass.cs

public class DataAccessClass
{
    public static IEnumerable<string> GetCountries()
    {
        // access the database and retrieve all the values
        // returns IEnumerable (a list of items)
    }

    public static IEnumerable<string> GetStates(string selectedCountry)
    {
        // access the database and retrieve all the corresponding states
        // linq2sql: var states = from o in db.States
        //                        where o.country = selectedCountry
        //                        select o;
        // returns IEnumerable (a list of items)
    }
}

あなたのページ.aspx

<asp:DropDownList id="ddlistCountries" runat="server" AutoPostBack="True" /><br />
<asp:DropDownList id="ddlistStates" runat="server" />

YourPage.aspx.cs

public partial class YourPage
{
    protected void Page_Init(object sender, EventArgs e)
    {
         ddlistCountries.SelectedIndexChanged += new EventHandler(ddlist_SelectedIndexChanged);
    } 

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!isPostBack)
        {
            PopulateCountries();
            ddlistStates.Enabled = false; // no country selected yet!
        }
    }

    protected void PopulateCountries()
    {
        ddlistCountries = DataAccessClass.GetCountries();
        ddlistCountries.DataBind();   
        ddlist.Items.Insert(0, "Select a country");
    }

    void ddlist_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlistCountries.SelectedIndex != 0)
        {
             ddlistStates.DataSource = DataAccessClass.GetStates(ddlistCountries.SelectedValue);
             ddlistStates.DataBind();
             ddlistStates.Enabled = true;
        }
        else
        {
            ddlistStates.Items.Clear();
            ddlistStates.Enabled = false;
        }
    }
} 

これを理解できない場合は、基本に戻るか、プログラミングを完全に忘れてください。

于 2012-08-23T14:21:24.613 に答える
3
DropDownList2.DataSource = {your data source}; 
DropDownList2.DataTextField = "text column name"; 
DropDownList2.DataValueField = "data column name of id"; 
DropDownList2.DataBind();

データ ソースを DDL に設定し、表示する値を設定してバインドする必要があります。

于 2012-08-23T14:25:53.090 に答える
0

次のようにドロップダウンリストを使用することをお勧めします。

ddl.DataSource = YourDBSource.Get();
ddl.DataBind();

次に、ここに何を表示するかを決定できます。

ddl.DataTextField = ...;

or 

ddl.DataValueField = ...;

まず第一に、.aspx ページで listItem を構築する理由はありません。これは、ddl をプログラムで設定するためです。

第二に、「ここで DB 値をキャッチして次のページに送信している」という意味がわかりません。DB で適切なクエリを dataSource に入力するだけです。

より簡単なフィルタリングを実行したい場合は、Linq2SQL を使用してみてください。

さらに、次のように *Page_Load()* でこのデータバインディングを実行する必要があります。

protected void Page_Load(object sender, EventArgs e)
{

        if (!IsPostBack)
        {
            ddlErreur.DataSource = ...;
            ddlErreur.DataTextField = ...;
            ddlErreur.DataBind();
        }
}
于 2012-08-23T14:23:19.387 に答える