2013-08-26 76 views
1

嗨:)我正在做一個簡單的表單。提示用戶填寫街道地址。每個用戶最多可以添加5個街道地址。因此,我有5個同樣的控件。我正在使用一個數據庫來提供所有國家和城市的名單。我正在收聽每個國家/地區列表上的OnSelectedItemChanged事件。觸發此事件時,我將連接到數據庫並將相應的城市列表綁定到適當的國家/地區ID。ASP.NET數據綁定無法正常工作OnSelectedItemChanged事件

所以,這是相當簡單的。我可以做5個不同的事件處理程序,但我只想創建一個事件處理程序併爲每個國家/地區列表項目收聽。

我的國家/地區名單分別稱爲lstContactCountry1,lstContactCountry2,...,最多5個,City列表分別稱爲lstContactCity1,lstContactCity2。

我正在使用DropDownLists。

所以,我的問題是,當我更改任何國家下拉列表中選擇的項目,除了數字1,城市列表根本沒有數據綁定。數據綁定僅在我更改了第一個國家/地區列表的選定項目後才起作用。此外,即使我一次又改變了第一個國家列表的選定項目,例如,將第二個國家列表的選定項目更改爲兩個城市列表綁定到同一個國家,即使它們不應該「T。

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」。就這樣。 :)

+0

[Sql注入](http://msdn.microsoft.com/en-us/library/ff648339.aspx)有人嗎? –

回答

2

您正在調用this.DataBind();,該數據綁定已綁定頁面上的所有內容(數據源設置在代碼後面或用於aspx代碼的<%)。

您應該開始通過在綁定的實際控件上調用databind來解決此問題。

lstContactCity.DataBind(); 
+0

感謝您的快速響應!我按照你告訴我的方式改變了代碼,但它仍然不起作用:( – Yulian

+0

我發現了這個錯誤,我在問題描述的底部寫了它 順便說一句,你說得對,this.DataBind()綁定頁面上所有使用數據綁定的元素,但它仍然可以在視覺上對整個頁面進行綁定。所以,這絕對不是問題。順便說一句,我固定這條線是因爲它確實沒有意義綁定整個頁面 所以,畢竟 - 再次感謝:) – Yulian