在下拉列表中显示DB值

时间:2012-08-23 14:19:08

标签: c# asp.net

  

可能重复:
  Display DB values in a dropdownlist

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

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

我无法在DDL中显示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>

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

  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();

3 个答案:

答案 0 :(得分:4)

好吧,你必须以某种方式将你的ddlist绑定到db结果。看起来像这样:

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

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

如果我理解正确,您有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)
    }
}

YourPage.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;
        }
    }
} 

如果你无法理解这一点,要么回到基础,要么完全忘记编程。

答案 1 :(得分:3)

DropDownList2.DataSource = {your data source}; 
DropDownList2.DataTextField = "text column name"; 
DropDownList2.DataValueField = "data column name of id"; 
DropDownList2.DataBind();

您需要将数据源设置为DDL,然后设置要显示的值,然后绑定它。

答案 2 :(得分:0)

我建议使用这样的下拉列表:

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

然后您可以通过以下方式决定要显示的内容:

ddl.DataTextField = ...;

or 

ddl.DataValueField = ...;

首先,没有理由在.aspx页面中构建listItem,因为您将以编程方式填充ddl。

其次,我不知道你的意思是'我在这里将数据库值复制并发送到下一页'。只需在您的数据库上使用适当的查询填充dataSource即可。

如果你想要更简单的过滤/ wahtever,尝试使用Linq2SQL。

此外,您需要在* Page_Load()*中执行此数据绑定,如下所示:

protected void Page_Load(object sender, EventArgs e)
{

        if (!IsPostBack)
        {
            ddlErreur.DataSource = ...;
            ddlErreur.DataTextField = ...;
            ddlErreur.DataBind();
        }
}