2016-03-05 67 views
1

我已經閱讀了許多關於同樣的事情的其他問題,但似乎答案不屬於我如何執行我的代碼。在從用戶界面向我的數據庫添加或刪除一條記錄或一行信息後,它不會顯示在組合框中,直到我重新啓動應用程序。也許有人可以啓發我,因爲我對此有點新鮮。點擊添加按鈕時,以下是我的代碼。C#,添加數據後刷新組合框

private void FBinterface_Load(object sender, EventArgs e) 
    { 
     txtSerial.Focus(); 
     try 
     { 
      connection.Open(); 

      OleDbCommand command = new OleDbCommand(); 
      command.Connection = connection; 
      string SerialQuery = "select SerialNumber from Inventory"; 
      command.CommandText = SerialQuery; 

      //TO READ DATA 
      OleDbDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       comboSerial.Items.Add(reader["SerialNumber"]); 
      } 
      connection.Close(); 
     } 
     catch (OleDbException ex) 
     { 
      MessageBox.Show(ex.Message); 
      connection.Close(); 
     } 

private void btnAdd_Click(object sender, EventArgs e) 
    { 
     if (!string.IsNullOrEmpty(txtSerial.Text)) 
     { 
      try 
      { 
       connection.Open(); 

       OleDbCommand command = new OleDbCommand(); 
       command.Connection = connection; 
       command.CommandText = @"insert into 
        Inventory(SerialNumber,PartNumber,ROnumber,Location) 
        values ('" + 
         txtSerial.Text + "','" + 
         txtPart.Text + "','" + 
         txtRO.Text + "','" + 
         txtLocation.Text + "')"; 
       //TO READ DATA 
       command.ExecuteNonQuery(); 
       MessageBox.Show("Inventory Added"); 

       txtPart.Clear(); 
       txtSerial.Clear(); 
       txtRO.Clear(); 
       txtLocation.Clear(); 

       if (dataGridFB.DataSource != null) 
       { 
        dataGridFB.DataSource = null; 
       } 
       else 
       { 
        dataGridFB.Rows.Clear(); 
       } 
       txtSerial.Focus(); 
       connection.Close(); // CLOSE HERE OR 
            // YOU CANNOT ENTER RECORDS SIMULTANEOUSLY 
      } 
      catch (OleDbException ex) 
      { 
       MessageBox.Show(ex.Message); 
       connection.Close(); 
      } 
     } 
    } 
+0

這就是爲什麼我有這樣的方式從頁面中刪除它們。那麼我如何編輯我擁有的? – CamlCase

+0

我沒有看到ComboBox代碼......你如何初始化它?您如何首先獲得數據源?你想添加/更改哪些數據? – Ian

+0

我很想告訴你,但我不知道如何添加在您的文章 – CamlCase

回答

2

舉一個簡單的修復,可以行connection.Close()之前在btnAdd_Click事件處理程序中添加以下代碼片段:

  OleDbCommand command = new OleDbCommand(); 
      command.Connection = connection; 
      string SerialQuery = "select SerialNumber from Inventory"; 
      command.CommandText = SerialQuery; 

      //TO READ DATA 
      OleDbDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       comboSerial.Items.Add(reader["SerialNumber"]); 
      } 

該代碼段將基本上重新綁定ComboBoxcomboSerial。如果其基礎數據受到btnAdd_Click程序的影響,它也適用於其他ComboBoxes。此外,創建一個專門的過程(類似於ResfreshAllComboBoxes())可能會富有成效,請將代碼放在上面的示例代碼片段中,並在基礎數據更改後調用它。

希望這可能有所幫助。

+1

那確實很不錯。我在之前添加了「comboSerial.items.clear()」,因爲它會保留現有的並重新添加它,感謝您的幫助 – CamlCase

+0

沒錯,我很高興它適合您。非常歡迎。同樣感謝,祝你的項目順利。祝好, –

1

將代碼放入(FBinterface_Load)內部的新方法(比如FillComboSerial())最好,然後在關閉連接之後立即插入每條新記錄後再調用該方法。

+1

是的,我認爲這樣做可以消除多餘的代碼,謝謝。 – CamlCase