使用LINQ绑定2下拉列表

时间:2012-09-25 09:48:10

标签: asp.net sql linq drop-down-menu

我陷入了我的项目,我真的需要一些帮助! 我有2个下拉列表“DropDownPostal”和“DropDownCity”。当用户/员工登录系统时,他会在第一个下拉列表中获取邮政列表。让我们说他选择了一个邮政,并贴上第二个下拉“城市”。我希望用用户之前选择的邮政更新城市。我有一切都在使用登录并从数据库检索数据到DropDownPostal。但我无法使用任何数据更新其他DropDownCity!

这是我为postaldropdown所做的事件的代码,我试图做一个“onLeave”事件。

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
   using System.Web.UI;
   using System.Web.UI.WebControls;

 namespace Test
  {
public partial class WebForm1 : System.Web.UI.Page
{

    // Entity
    DanxWebsiteEntities dwe = new DanxWebsiteEntities();

    protected void Page_Load(object sender, EventArgs e)
    {


        //Dropdown postback
        //DropDownListPostal.AutoPostBack = false;

        //Sessions
        if (Session["UserID"] == null && Session["Name"] == null)
        {
            Response.Redirect("Error.aspx");
        }
        else
        {
            msg1.Text = "User id: "+Session["UserID"].ToString();
            msg2.Text = "User Name: " + Session["Name"].ToString();
        }   
        //Update dropdownpostal
        if (!IsPostBack)
        {
            //Guid is structure type 
            Guid id =(Guid) Session["UserID"];
            DropDownListPostal.DataSource = (from custumAdr in dwe.VW_CustumAddress
                                             where custumAdr.UserID ==(Guid)id
                                             select custumAdr).ToList();
            DropDownListPostal.DataTextField = "Postal";
            DropDownListPostal.DataValueField = "UserID";
            DropDownListPostal.DataBind();
        }
    }



    protected void DropDownListPostal_SelectedIndexChanged1(object sender, EventArgs e)
    {
        foreach (var data in dwe.VW_CustumAddress)
            if (data.Postal == DropDownListPostal.SelectedItem.ToString())
            {
                DropDownListBy.Text = data.City;

            }
            else
            {

            }
    }
    }

}

我甚至不确定这段代码是否接近正确。 我们非常感谢您对代码的详细帮助。

干杯: - )

4 个答案:

答案 0 :(得分:1)

  1. 确保DropDownListPostal具有AutoPostBack = True

  2. 您的代码中没有DropDownListPostal.DataBind(),因此您分配给它的数据没有被绑定。确保在使用.DataSource分配数据后调用此方法。

答案 1 :(得分:1)

正如你在这里提到的那样

//Dropdown postback
//DropDownListPostal.AutoPostBack = false;

请说实话。

<asp:DropDownList ID="DropDownListPostal" runat="server"  AutoPostBack="true" OnSelectedIndexChanged="DropDownListPostal_SelectedIndexChanged"></asp:DropDownList>

而不是使用 DropDownListBy.Text = data.City;

您也可以按价值选择下拉列表,。

 DropDownListBy.SelectedValue = data.id

希望这会对你有所帮助

答案 2 :(得分:1)

如果我理解正确,您只需根据dropDownListCity中选择的值更改dropDownListPostal中显示的值。为此,您需要绑定Page_Load中的两个下拉列表,然后在触发SelectedIndexChanged时处理所选索引。

private IEnumerable<KeyValuePair<string, string>> GetData()
{
    using(var dataContext = new DbEntities())
    {
        return dataContext.VW_CustumAddress 
            .ToList() 
            .Select(item => new KeyValuePair<string, string>(item.Postal, item.City))
            .ToArray();
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostback)
    {
        IEnumerable<KeyValuePair<string,string>> data = GetData();
        //Bind Postal dropdown list
        dropDownListPostal.DataSource = data.Select(kvp => kvp.Key).ToList();
        // ^ Select only 'Postal' column in dropdown list.
        dropDownListPostal.DataBind();
        // Bind City dropdown list
        // We need to bind to a key-value pair to know the correspondence between items
        dropDownListCity.DataValueField = "Key";
        dropDownListCity.DataTextField = "Value";
        dropDownListCity.DataSource = data;
        dropDownListCity.DataBind();
    }
}

现在,在您将控件绑定到数据后,您只需要处理SelectedIndexChanged dropDownListPostal事件(不要忘记在AutoPostback="true"的标记中设置dropDownListPostal )。 编辑:在选择项目之前,请清除下拉列表的选择,以确保只选择了一个项目。

protected void OnDropDownListPostalSelectedIndexChanged(object sender, EventArgs e)
{
    dropDownListCity.ClearSelection();
    var postal = dropDownListPostal.SelectedValue;
    var listItem = dropDownListCity.Items.FindByValue(postal);
    listItem.Selected = true;
}

应该这样做。希望它有所帮助。

答案 3 :(得分:0)

您可以尝试使用此代码

 //You must bind your datas before set Text Value
 DropDownListBy.DataSource =...;
 DropDownListBy.DataBind();

 DropDownListBy.Text = data.City;

链接:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.text.aspx

或者你也可以

 DropDownListBy.Items.Add(data.City);