2017-02-09 11 views
1

私はwinformアプリケーションをC#で取得しており、SQL Serverデータベースから値を取得しています。 私はcomboboxでapearしたい値を得ることができますが、選択に応じて、私はcheckedcomboboxに対応するsql行を表示して、ユーザーが希望するものを選択したいと考えています。 私が持っているコードは次のとおりです。(コンボボックスを埋めるために)コンボボックスからcheckelistboxを入力してください。SQL

SqlDataAdapter SDA = new SqlDataAdapter("select distinct desempenho from vidros", con); 
    DataTable DTT = new DataTable(); 
    SDA.Fill(DTT); 
    desempenho.Items.Clear(); 
    foreach (DataRow ROW in DTT.Rows) 
    { 
     desempenho.Items.Add(ROW["desempenho"].ToString()); 
    } 

そして:(checkedcomboboxで選択した行を表示する)魔女が動作していません。

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con); 
      DataTable DTT = new DataTable(); 
      sda.Fill(DTT); 
      checkedListBox1.Items.Clear(); 
      foreach (DataRow AB in DTT.Rows) 
      { 
       checkedListBox1.Items.Add(AB["desc"].ToString()); 
      } 
     } 

これは、ユーザーに複数の項目を選択する最も良い方法ですか? コードに何が問題なのか誰にでも分かりますか?

ありがとうございます。

+0

何が問題なのですか?あなたはこのコードでどんな問題があるのか​​説明できますか? – Steve

+0

@Steve悪い説明を申し訳ありません。私が持っている問題は、コンボボックスから項目を選択すると、何もチェックリストボックスに表示されないということです。 – septaug

+0

例外はスローされませんか?そのDESCフィールド名は予約済みのキーワードであり、そのまま使用すると例外が発生します。 – Steve

答えて

1

を避けるために優れているリストボックスを結合するためのコードが間違った場所に置かれているように見えます。 コンボボックスの選択項目に基づいてリストボックスをバインドする場合は、そのロジックをコンボボックスのSelectedIndexChangedイベントに記述する必要があります。

コンボボックスのSelectedIndexChangedイベントハンドラにコードを移動すると、次のようになります。

private void desempenho_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con); 
     DataTable DTT = new DataTable(); 
     sda.Fill(DTT); 
     checkedListBox1.Items.Clear(); 
     foreach (DataRow AB in DTT.Rows) 
     { 
      checkedListBox1.Items.Add(AB["desc"].ToString()); 
     } 
    } 

このハンドラをハンドラのSelectedIndexChangedイベントにアタッチすると、問題を解決するはずです。

1

このエラーは、まもなく全員に発生します。

DESCは、既存のデータベースシステムでは予約されたキーワードです。結果はORDER BY節で降順に並べ替えられます。あなたは本当にあなたがエスケープ文字で囲む必要がある(できるだけ早く名前より良い変化する)そのようにという名前のフィールドを持っている場合

だから(SQL Serverは、正方形braketsを使用しています)

SqlDataAdapter sda = new SqlDataAdapter(@"select [desc] 
     from vidros where desempenho ='" + desempenho.Text + "'", con); 

サイードパラメータ化されたクエリを使用することもお勧めします。あなたのケースでは、比較的安全でなければなりませんが、完全にSQLインジェクションの可能性

SqlDataAdapter sda = new SqlDataAdapter(@"select [desc] 
     from vidros where desempenho = @emp", con); 
sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text; 
..... 
+0

こんにちは、助けてくれてありがとうございます。 – septaug

関連する問題