-3

可能重复:
在下拉列表中显示数据库值

我正在获取数据库值并将它们显示在下拉列表中。我有国家和州下拉列表:

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

我无法在 DDL 中显示数据库值。我在状态下拉列表中得到--选择一个状态--如何在下拉列表中显示数据库值?

<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>

我在这里获取数据库值并将它们发送到下一页

  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 绑定到数据库结果。看起来像这样:

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

根据更多评论...我将不得不玩一个小轮盘赌,猜猜你的意图是什么。您的代码有多个问题,您显然有一些问题在解释自己。

如果我理解正确,您有 2 个下拉列表。您想用国家填充一个,并根据选择填充第二个下拉列表。

基本原理如下所示:

数据访问类.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。

其次,我不知道您所说的“我在这里收集数据库值并将它们发送到下一页”是什么意思。只需在数据库上使用适当的查询填充数据源。

如果您想执行更简单的过滤/无论您想要什么,请尝试使用 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 回答