我陷入了我的项目,我真的需要一些帮助! 我有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
{
}
}
}
}
我甚至不确定这段代码是否接近正确。 我们非常感谢您对代码的详细帮助。
干杯: - )
答案 0 :(得分:1)
确保DropDownListPostal具有AutoPostBack = True
您的代码中没有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);