0

我被困在我的项目中,我真的需要一些帮助!我有 2 个下拉列表“DropDownPostal”和“DropDownCity”。当用户/员工登录系统时,他会在第一个下拉列表中获得 Postals 列表。假设他选择了一个邮政和标签到第二个下拉菜单“城市”。我希望使用用户之前选择的邮政来更新城市。我已经完成了所有使用登录并将数据从数据库检索到 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

4 回答 4

1
  1. 确保 DropDownListPostal 具有 AutoPostBack = True

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

于 2012-09-25T10:00:40.793 回答
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

希望对你有帮助

于 2012-09-25T10:37:44.483 回答
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;
}

那应该这样做。希望能帮助到你。

于 2012-09-25T11:02:31.187 回答
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);
于 2012-09-25T09:59:06.690 回答