2016-11-16 6 views
1

私のコードでは、テーブルを作成してCSVファイルをエクスポートしました。私のコードの別のセクションでは、comboBoxには自分のデータベースのテーブル名が設定されています。これは次のようになります達成しようとしています何データベースに新しいテーブルを作成した後で、comboBoxをリフレッシュする

private void FillCombo() 
    { 
     try 
     { 

      string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True"; 
      using (SqlConnection con2 = new SqlConnection(connectionString)) 
      { 
       con2.Open(); 
       string query = "SELECT * FROM INFORMATION_SCHEMA.TABLES "; 
       SqlCommand cmd2 = new SqlCommand(query, con2); 

       SqlDataReader dr2 = cmd2.ExecuteReader(); 
       while (dr2.Read()) 
       { 
        int col = dr2.GetOrdinal("TABLE_NAME"); 
        comboBox1.Items.Add(dr2[col].ToString()); 
       } 

      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 

は、上記の機能を介して実行して、新しく追加されたテーブルを反映するようコンボボックスをリフレッシュすることです。あなたが推測として、それは動作しますが、値が重複している、

private void button1_Click_1(object sender, EventArgs e) 
    { 
     //this is where I would just rewrite the contents of the above function 
    } 

:何頭に浮かんだことは、最初のボタンを作成し、このような上記の関数を書き換えることでした。既存の情報を複製せずにcomboBoxを更新するにはどうすればよいですか?あなたがリコール方法の前に項目をクリアすることができます

+2

最初に項目をクリアしますか? – Berkay

+0

'comboBox1.ResetText()'を実行してから同じ結果を実行し、@Berkayを複写する – Jevon

+0

彼は 'comboBox1.Items.Clear();'を意味します - それを 'FillCombo'の先頭に置き、ボタンクリックハンドラから 'FillCombo'を呼び出します。 – Blorgbeard

答えて

3

私がコメントで述べたように、

combobox.Items.Clear(); 

またはステートメント場合は、このようなwhileループで

while (dr2.Read()) 
{ 
     int col = dr2.GetOrdinal("TABLE_NAME"); 
     if (!comboBox1.Items.Contains(dr2[col].ToString())) 
     { 
      comboBox1.Items.Add(dr2[col].ToString()); 
     } 
} 

だから、あなたが必要としないを追加することができますすべてのリコールをクリアします。

希望は、

+0

2番目のソリューションでは、削除されたテーブルや名前が変更されたテーブルは処理されません。 – Blorgbeard

+0

新しく追加されたテーブルのために、ちょうどいいです。 @Blorgbeard – Berkay

関連する問題