2016-12-20 3 views
1

cの行動を取ると私は手伝ってしまったとして、それが正常に解決された(combobox population based on each other sql c#)ソリューションは、私は魔法のように動作を思い付いた:コンボボックスは、値を取得し、他の日、いくつかの問題を抱えていた#

public void City() 
{ 

    using (SqlConnection conn = new SqlConnection(connectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand("SELECT DISTINCT CityName FROM City WHERE CountryName = @CountryName", conn)) 
     { 
      using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
      { 
       cmd.Parameters.AddWithValue("@CountryName", this.cmb_countryname.SelectedValue); 

       DataTable dt = new DataTable(); 
       da.Fill(dt); 

       DataRow dr = dt.NewRow(); 
       dr["CityName"] = ""; 
       dt.Rows.InsertAt(dr, 0); 
       this.city.DisplayMember = "CityName"; 
       this.city.ValueMember = "CityName"; 
       this.city.DataSource = dt; 
      } 
     } 
    } 
} 

をこれまでのところ、とても良い。 Country1はcmb_countrynameで、City1はcmb_citynameにマップされています。私が言ったように、それに問題はありません(この解決策を見せてくれたユーザーにはもう一度感謝します)。しかしここにはひねりがあります。両方のコンボボックスにデータをロードすると、それらをグリッドビューに送信します。まだ大丈夫です。特定の行をクリックすると、国や都市を含むすべての列がさまざまなコンボボックスに取得されます。まだ問題ありません。私はこの新しいコンボボックスの国を変更するとき、以前と同じ動作をしたい、つまり国を都市にマッピングします。私はこのために持っているコードは、私が明らかに(完璧に働いていた)前の1つの方法の名前のために持っていた同じで、コンボボックスが変更されます。

public void CityChange() 
{ 

using (SqlConnection conn = new SqlConnection(connectionString)) 
{ 
    using (SqlCommand cmd = new SqlCommand("SELECT DISTINCT CityName FROM City WHERE CountryName = @CountryName", conn)) 
    { 
     using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
     { 
      cmd.Parameters.AddWithValue("@CountryName", this.cmb_passedcountryname.SelectedValue); 

      DataTable dt = new DataTable(); 
      da.Fill(dt); 

      DataRow dr = dt.NewRow(); 
      dr["CityName"] = ""; 
      dt.Rows.InsertAt(dr, 0); 
      this.passedcity.DisplayMember = "CityName"; 
      this.passedcity.ValueMember = "CityName"; 
      this.passedcity.DataSource = dt; 
     } 
    } 
} 

}

が、私はこれで直面しています「追加情報:マッピングが知られている管理プロバイダのネイティブ型にオブジェクト型System.Data.DataRowViewから存在していない。」

:エラーメッセージとは、現在時間以上のためにそれを解決しようとstuckedされています

私の理解では、this.cmb_passedcountryname.SelectedValueSystem.Data.DataRowViewのように扱っていますが、そうではありません。私は正しい道のりであり、もしそうなら、私はどのように進めるべきですか?ありがとう!

EDIT:

SRYは、言及を忘れてしまった、CityChange()はpassedcountrynameのSelectedIndexChangedプロパティで呼び出されます。

EDIT2:

コードの一部の誤りが編集されました。

SOLUTION:

Why I get "System.Data.DataRowView" instead of real values in my Listbox?

みんなありがとう、私を助けようとしました。歓声みんな

+0

NULL値かもしれないと思います.cmb_passedcountryname.SelectedValue'と値を投稿すると、ブレークポイントに応じて – Hackerman

+0

を入力してください、それはDataRowViewだと思います。 – mihocu

+0

this.cmb_passedcountryname.SelectedValue \t {System.Data.DataRowView} \tオブジェクト{System.Data.DataRowView} – mihocu

答えて

0

私はあなたが

に値をデバッグして表示することができますcmb_passedcountryname.SelectedValue

は、その行にブレークポイントを入れても、インスペクターエリアで、この `これを書い

+0

が疑わしい場合は、DataRowViewとして扱われます。理由は分かりません。 – mihocu

+0

this.cmb_passedcountryname.SelectedValue \t {System.Data.DataRowView} \tオブジェクト{System.Data.DataRowView} – mihocu

関連する問題