2010-12-20 114 views
2

爲了嘗試構建3層架構的c#asp.net應用程序,我已經開始構建一個用於連接數據庫的數據庫類,另一個類是城市,其中有表格城市中的每列的方法,以及一個城市類,其中我有GetCities方法,創建一個City對象列表,然後使用DataSource嚮導設置控件使用來自GetCities()的數據。 我所得到的是空白在下拉列表中。任何想法爲什麼?從對象列表填充下拉列表

 public List<City> GetCities() 
    { 
     List<City> cities = new List<City>(); 
     Database db = new Database(); 
     SqlConnection conn = db.GetConnection(); 
     String sql = "SELECT * FROM CITIES"; 
     SqlCommand cmd = new SqlCommand(sql, conn); 
     SqlDataReader reader = cmd.ExecuteReader(); 

     while (reader.Read()) 
     { 
      City c = new City(reader.GetInt32(0), reader.GetString(1).ToString()); 
      cities.Add(c); 
     } 

     db.CloseConnection(); 
     return cities; 
    } 

感謝

+0

問題出在你還沒有分享的代碼中!你如何填充列表? ** WIZARD生成的代碼是什麼?** – Aliostad 2010-12-20 13:33:48

+0

填寫列表的代碼看起來很好。問題必須是你如何綁定到下拉列表(也許你可以發佈)?我知道你說過你使用了一個嚮導,這將是我看到它在做什麼的第一個地方。此外,您正在關閉數據庫連接,但如果有異常,它將不會關閉。可以使用try/finally,或者在您對ExecuteReader的調用中指示關閉閱讀器時連接將關閉,併爲您的閱讀器使用using()語句。 – 2010-12-20 13:36:13

+0

我正在討論的嚮導在點擊DropDownList上的「選擇數據源」時被訪問,並彈出一個提示我輸入數據源的窗口。我選擇新的數據源,然後彈出另一個窗口,我從包含「訪問數據庫,SQL數據庫,實體」的列表中選擇了對象等。之後,另一個窗口彈出提示選擇對象,在我的情況下是城市。下一步>選擇一種方法,在我的情況下是GetCities()。 – user228137 2010-12-20 14:07:44

回答

0

這個問題出現在City類中,經過仔細檢查後,我意識到構造函數正在分配錯誤地收到的參數。它正在工作。謝謝!

public class City 
{ 
    int id; 
    string name; 

    public City(int id, string name) 
    { 
     this.id = id; 
     this.name = name; 

    } 

    public int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 
    public String Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

} 
3

你設置DataTextField,DataValueField屬性和調用DataBind?


在這一點上,我會試圖讓這個概念儘可能簡單地工作,然後開始添加一些東西,直到找到問題。開始一個全新的頁面,添加一個DropDownList但不接觸數據源或更改任何屬性,直接進入代碼隱藏並添加此在Page_Load中:

DropDownList1.DataValueField = "ID"; 
DropDownList1.DataTextField = "Name"; 
DropDownList1.DataSource = new[] { 
    new { ID = 1, Name = "Alice" }, 
    new { ID = 2, Name = "Mike" }, 
    new { ID = 3, Name = "John" } 
}; 
DropDownList1.DataBind(); 

是否行得通?它爲我做。然後嘗試更改DataValueField,DataTextField和DataSource以使用您的客戶列表。它現在破裂了嗎?然後你知道問題出現在客戶列表的某處,而不是你綁定數據的方式。

+0

我認爲這些都是由嚮導完成 – user228137 2010-12-20 14:09:13

+0

我真的不知道因爲我從來沒有使用過這個嚮導,但是這真的有助於解決這個問題,或者只是添加一個不需要的層?我總是設置DataTextField,DataValueField,DataSource = someList,並調用DataBind。 – 2010-12-20 15:19:41

+0

好點的J.D.,但是即使在page_load中放入以下結果也是一樣的:protected void Page_Load(object sender,EventArgs e) { 城市c = new Cities(); ddlistLocation.DataSource = c.GetCities(); ddlistLocation.DataTextField =「Name」; ddlistLocation.DataTextField =「Name」; ddlistLocation.DataBind(); } – user228137 2010-12-20 16:18:12

2

您是否對要填充的對象調用了DataBind()方法?

+0

我沒有在Page_Load()中調用DropDownListCities.DataBind(),但什麼都沒有。 – user228137 2010-12-20 14:08:54

+0

在從數據源中提取數據之前調用DataBind()。只是爲了檢查這是否可能是問題嘗試移動。DataBind()放入Page_OnPrerender事件處理程序中 – 2010-12-20 14:33:06