![](/img/trans.png)
[英]Asp.net Dropdownlist selected index changed AND TextChanged Events not Fire? (C#)
[英]dropdownlist selected index changed in asp.net using C#
我有2個下拉列表。
我要在選擇城市時填寫州列表...
我正在使用代碼
protected void Ddl_SelectedIndexChanged(object sender, EventArgs e)
{
String sqlQuery="select SM.StateId,StateName From StateMast SM,CityMast CM where CM.StateId=SM.StateId AND CM.CItyId='"+ Convert.ToInt16(DdlCity.SelectedValue.ToString())+"'";
DdlState.DataSource = cls.Select(sqlQuery);
DdlState.DataTextField = "StateName";
DdlState.DataValueField = "StateId";
}
但是選擇城市沒有障礙...
我設置了autopostback的city=true
..
Select是一個正在返回數據表的函數
public DataTable Select(String sqlQuery)
{
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sqlQuery,con);
DataTable table = new DataTable();
adapter.Fill(table);
con.Close();
return table;
}
設置數據源后,您沒有調用DataBind()
。
protected void Ddl_SelectedIndexChanged(object sender, EventArgs e) {
String sqlQuery="select SM.StateId,StateName From StateMast SM,CityMast CM where CM.StateId=SM.StateId AND CM.CItyId='"+ Convert.ToInt16(DdlCity.SelectedValue.ToString())+"'";
DdlState.DataSource = cls.Select(sqlQuery);
DdlState.DataTextField = "StateName";
DdlState.DataValueField = "StateId";
DdlState.DataBind();
}
編輯(帶有驗證器):
ASPX:
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlCity" runat="server" AutoPostBack="true"
onselectedindexchanged="ddlCity_SelectedIndexChanged">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="rfvCity" runat="server" ErrorMessage="City is required" ControlToValidate="ddlCity" InitialValue="0" Display="Dynamic"></asp:RequiredFieldValidator>
<br />
<asp:DropDownList ID="ddlState" runat="server" AutoPostBack="true">
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>
</body>
的.cs:
public partial class ChildDDL : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
return;
ddlCity.Items.Add(new ListItem("Select One", "0"));
ddlCity.Items.Add(new ListItem("City 1", "1"));
ddlCity.Items.Add(new ListItem("City 2", "2"));
ddlCity.Items.Add(new ListItem("City 3", "3"));
List<State> lstState = new List<State>();
lstState.Add(new State() { StateID = 1, StateName = "State 1", CityID = 1 });
lstState.Add(new State() { StateID = 2, StateName = "State 2", CityID = 1 });
lstState.Add(new State() { StateID = 3, StateName = "State 3", CityID = 1 });
lstState.Add(new State() { StateID = 4, StateName = "State 4", CityID = 2 });
lstState.Add(new State() { StateID = 5, StateName = "State 5", CityID = 2 });
lstState.Add(new State() { StateID = 6, StateName = "State 6", CityID = 2 });
lstState.Add(new State() { StateID = 7, StateName = "State 7", CityID = 3 });
lstState.Add(new State() { StateID = 8, StateName = "State 8", CityID = 3 });
Session["lstState"] = lstState;
}
protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)
{
List<State> lstState = (List<State>)Session["lstState"];
ddlState.DataSource = lstState
.Where(state => state.CityID == Convert.ToInt32(ddlCity.SelectedValue)); ;
ddlState.DataTextField = "StateName";
ddlState.DataValueField = "StateID";
ddlState.DataBind();
}
public class State
{
public int StateID { get; set; }
public string StateName { get; set; }
public int CityID { get; set; }
}
}
該頁面可與驗證程序一起很好地工作。
嘗試在您的下拉列表屬性中設置Autopostback = true
您可以使用以下代碼:
foreach (ListItem item in YourDropDownList.Items)
{
if (item.Text == defaultText)
{
item.Selected = true;
break;
}
}
我已經做了類似的案例,使用Category DropDownList和Product DropDownList來顯示與所選類別相關的不同產品,並且每次用戶選擇類別時,列表都會更改。
首先,將源(在我的情況下為Category,在您的情況下為City)的AutoPostBack設置為True。
在SelectedIndexChanged事件上:
if ( DdlCity.SelectedValue != null ) {
String sqlQuery="select SM.StateId,StateName From StateMast SM,CityMast CM where CM.StateId=SM.StateId AND CM.CItyId='"+ Convert.ToInt16(DdlCity.SelectedValue.ToString())+"'";
// Try to get the DataTable first
DataTable data = cls.Select(sqlQuery);
// I assume there is a Label name lblNumOfData
lblNumOfData.Text = String.Format("There is {0} state", data.Rows.Count);
DdlState.DataSource = data;
DdlState.DataValueField = "StateId";
DdlState.DataTextField = "StateName";
DdlState.DataBind();
}
該代碼應該能夠顯示狀態列表,但是,如果仍然看不到狀態,則添加代碼以確保函數Select返回了數據。
我認為您必須更新DropDown所在的更新面板...為什么不使用AJAX控件工具包級聯DropDown? 它們是針對與您相同的場景而構建的。
http://www.asp.net/ajax/ajaxcontroltoolkit/samples/CascadingDropDown/CascadingDropDown.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.