2016-05-05 51 views
3

OleDbDataReaderから重複を排除したいと思います。 簡単ですが、私のホイールを回転させています。どんな助けもありがとう!所有者は、その1つの列のみを取得しているあなたのコードに必要なだけの列をC#コンボボックスから重複した値を削除するにはどうすればよいですか?

select distinct Owner from PPAPdatabase 

代わりの

select * from PPAPdatabase 

をしてDISTINCT句を適用します。

 private void Database_Load(object sender, EventArgs e) 
     {   
      try 
      { 
       connection.Open(); 
       OleDbCommand command = new OleDbCommand(); 
       command.Connection = connection; 
       string query = "select * from PPAPdatabase"; 
       command.CommandText = query;     

       OleDbDataAdapter da = new OleDbDataAdapter(command); 
       dt = new DataTable(); 
       da.Fill(dt); 
       dataGridView1.DataSource = dt; 

       OleDbDataReader reader = command.ExecuteReader(); 
       while (reader.Read()) 
      { 
       comboBox_Owner.Items.Add(reader["Owner"].ToString());     
      } 
+0

なぜ追加のリーダーを行うことができますか?なぜ同じデータテーブルではないのですか? –

+1

私はそれを行うためにデータベースを使用したいと思います。それに適した選択された個別のクエリを作成するだけです。 LINQを使用してコード内で行うこともできますが、この例では何の意味もありません。例えば'OwnerがnullでないPPAPdatabaseから別個のオーナーを選択する ' – ManoDestra

+0

' comboBox_Owner.Items.Clear() 'を使ってメソッドの先頭にあるComboBoxを最初にクリアし、SQLが' Ownerを持たないPPAPdatabaseから別個のオーナーを選択するように修正する「ヌル」。また、データソースを一度しか埋める必要はありません。実際には読者も行う必要はありません。リーダーまたはデータソースメソッドのいずれかを使用します。仕事が完了:) – ManoDestra

答えて

3

は次のようにSQLクエリをリファクタリングその列に固有の値を取得することができます。

または、次の行に置き換えます。私たちはあなたのデータベースへのSQLクエリを使用して個別の所有者をextreactした結果を再利用している。このソリューションでは

var owners = dt.AsEnumerable().Select(row => row["Owner"].ToString()).Distinct(); 
foreach(var owner in owners) 
{ 
    comboBox_Owner.Items.Add(owner);     
} 

:これにより

OleDbDataReader reader = command.ExecuteReader(); 
while (reader.Read()) 
{ 
    comboBox_Owner.Items.Add(reader["Owner"].ToString());     
} 

を。

+0

これは正しいアプローチです:) – ManoDestra

+0

コンボボックスにはすでにアイテムが含まれている場合はどうなりますか? – Adrian

+0

私は間違っていますが、** string query = "select * from PPAPdatabase"; **を使用してDataGridviewのすべてのデータを表示します。 – NOGRP90

2

あなたはこのよう

while (reader.Read()) 
{ 
    if (!comboBox_Owner.Items.Contains(reader["Owner"].ToString())) 
     comboBox_Owner.Items.Add(reader["Owner"].ToString());     
} 
+0

ありがとうございました。それが私の仕事です! – NOGRP90

+0

他の回答に示唆されているように、コンボボックスをクリアして、データベースからの別の値からコンボボックスを移入する方がよいでしょう。それがあなたにとって正しいソリューションです。 – ManoDestra

+0

@ManoDestraはい。それはありますが、私はそれを行う方法がわかりません:) – NOGRP90

関連する問題