2010-12-20 18 views
2

3層アーキテクチャのC#asp.netアプリケーションを構築しようとすると、データベースへの接続に使用されるクラスであるクラスを構築し始めました。 Cityの各列にメソッドを持つCityクラスと、Cityオブジェクトのリストを作成してGetCities()からのデータを使用するようにDataSourceウィザードを使用するGetCitiesメソッドを持つCitiesクラスです。 。 私はドロップダウンリストで空白になります。どんな考え?オブジェクトのリストからドロップダウンリストを作成する

 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

+0

あなたのコードを記入するためのコードは正常です。問題はドロップダウンリストにどのようにバインドしているか(問題を投稿できるかもしれません)でなければなりません。私はあなたがウィザードを使用していると言ったことを知っています。私はそれが何をしているのかを見るために最初に見えるでしょう。また、データベース接続をクローズしていますが、例外がある場合はクローズされません。 try/finallyを使用するか、ExecuteReaderの呼び出しで、リーダーが閉じられたときに接続が終了し、リーダーにusing()ステートメントを使用することを示します。 –

+0

私が話しているWIZARDは、DropDownListの「データソースの選択」をクリックしている間にアクセスされ、データソースの入力を促すウィンドウがポップアップします。私は新しいデータソースを選択し、 "Access db、SQL db、Entity"などのリストからオブジェクトを選択した別のウィンドウをポップします。その後、別のウィンドウがオブジェクトを選択するようにポップアップします。次へ>私の場合GetCities()メソッドを選択します。 – user228137

答えて

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をを呼び出していましたか?


この時点では、できるだけ簡単にコンセプトを作成してから、問題を特定するまで物事を追加していきます。それが動作します

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(); 

:、ブランドの新しいページで開始DropDownListコントロールを追加しますが、データソースに触れたり、任意のプロパティを変更し、分離コードに直接行くと、をPage_Loadでこれを追加しませんか?それは私のためです。次に、DataValueField、DataTextField、およびDataSourceを変更して、顧客リストを操作してみます。今は壊れていますか?次に、データをバインドする方法ではなく、顧客リストのどこかに問題があることがわかります。

+0

私はそれらがウィザードによって行われると思う。 – user228137

+0

私は本当にわからない。なぜなら、私はウィザードを使わないからだ。しかし、この場合は本当に助けになるのだろうか。私は常にDataTextField、DataValueField、DataSource = someListを設定し、DataBindを呼び出しました。 –

+0

良い点J.D.しかし、page_loadに次のものを入れても同じ結果になります:protected void Page_Load(object sender、EventArgs e) { Cities = new Cities(); ddlistLocation.DataSource = c.GetCities(); ddlistLocation.DataTextField = "Name"; ddlistLocation.DataBind(); } – user228137

2

移入するオブジェクトに対してDataBind()メソッドを呼び出しましたか?

+0

Page_Load()ではDropDownListCities.DataBind()を呼び出しましたが、何も表示しませんでした。 – user228137

+0

データソースからデータを取り出す前に、DataBind()を呼び出している可能性があります。これが問題かもしれないかどうかを確認するだけで、Page_OnPrerenderイベントハンドラへのDataBind() –

関連する問題