嗨 :) 我正在制作一个简单的表格。提示用户填写街道地址。每个用户最多可以添加 5 个街道地址。因此,我有 5 个相同的控件。我正在使用数据库来提供所有国家和城市的列表。我正在收听每个国家/地区列表上的 OnSelectedItemChanged 事件。触发此事件时,我将连接到数据库并将相应的城市列表绑定到相应的国家/地区 ID。
所以,这相当简单。我可以做 5 个不同的事件处理程序,但我只想创建一个事件处理程序并为每个国家列表项监听它。
我的国家/地区列表称为 lstContactCountry1、lstContactCountry2、... 直到第 5 位,而城市列表分别称为 lstContactCity1、lstContactCity2。
我正在使用下拉列表。
所以,我的问题是,当我更改任何国家下拉列表的选定项目时,除了数字 1,城市列表根本没有数据绑定。只有在我更改了第一个国家/地区列表的选定项目一次后,数据绑定才有效。此外,即使我已经更改了第一个国家/地区列表的选定项目,然后更改,例如,第二个国家/地区列表的选定项目,他们的城市列表已经绑定到同一个国家,即使他们应该不。
ASP.NET 代码隐藏:
protected void lstContactCountry1_SelectedIndexChanged(object sender, EventArgs e)
{
// lstContactCountry is the sender of the event
DropDownList lstContactCountry = sender as DropDownList;
// Get the number of DropDownList
char lstNumber = lstContactCountry.ID[lstContactCountry.ID.Length - 1];
lblTemp.Text = "Sender: " + lstContactCountry.ID;
// Get the IdCountry property from the selected value of the DropDownList
string idCountry = lstContactCountry1.SelectedValue;
// Some ADO.NET code :)
DataSet dataSet = new DataSet();
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("SELECT IdCity, CityName FROM City WHERE IdCountry = '" + idCountry + "' ORDER BY CityName", connection);
adapter.Fill(dataSet, "City");
// lstContactCity is the City DropDownList below the selected Country DropDownList
DropDownList lstContactCity = this.Master.FindControl("phSecuredPageMainContent").FindControl("lstContactCity" + lstNumber.ToString()) as DropDownList;
lblTemp.Text += "<br />Receiver: ";
lstContactCity.DataSource = dataSet.Tables["City"];
lstContactCity.DataTextField = "CityName";
lstContactCity.DataValueField = "IdCity";
this.DataBind();
// Adding a default value to the list
lstContactCity.Items.Insert(0, new ListItem("City", "0"));
lstContactCity.SelectedIndex = 0;
}
编辑:我发现了错误。它在这行代码中:
string idCountry = lstContactCountry1.SelectedValue;
我无意中在控件名称的末尾添加了一个“1”。就这样。:)