2016-09-24 30 views
2

任何人都可以幫助我如何避免重複輸出DataGridView。這裏是圖片Before change和圖片After add/edit or delete如何重新加載DataGridView使用DataTable.Load(DataReader)沒有重複的記錄

這裏是我的DataGridView裝載機:

private DataTable data() 
{ 
    using (OleDbConnection con = new OleDbConnection(inventorydb)) 
    { 
     using (OleDbCommand com = new OleDbCommand("Select * FROM Items",con)) 
     { 
      con.Open(); 
      OleDbDataReader reader = com.ExecuteReader(); 
      items.Load(reader); 
     } 
    } 
    return items; 
} 
void reset() 
{ 
    connect.Close(); 
    connect.ConnectionString = inventorydb; 
    connect.Open(); 
    dataGridView1.DataSource = null; 
    dataGridView1.Update(); 
    dataGridView1.Refresh(); 
    dataGridView1.DataSource = data(); 
} 

添加和保存更改:

private void save_Click(object sender, EventArgs e) 
{ 
    if (mode == "a") 
    { 
     connect.Close(); 
     connect.ConnectionString = inventorydb; 
     connect.Open(); 
     sqlcommand.CommandText = "INSERT INTO Items (SerialID,  Brand_Name, Item_Name,Item_Date) VALUES ('" + txtserial.Text + "','" + txtbrand.Text + "', '" + txtitem.Text + "', '" + date + "') "; 
     sqlcommand.Connection = connect; 
     OleDbDataReader reader = sqlcommand.ExecuteReader(); 
     MessageBox.Show("Record(s) Saved", "Sample"); 
    } 
    connect.Close(); 
    reset();  
} 
+0

在querry中使用不同的關鍵字 –

+0

您可以在添加,編輯或刪除中顯示代碼嗎?我無法用提供的代碼重現此行爲。 – Steve

+0

我試着把按鈕放在存取位置上保存/添加項目。 – Richard

回答

0

DataTable.Load增加導致到系統默認的現有行。因此,如果您只需要獲取最新記錄,在致電DataTable.Load之前,您應清除DataTable,否則新結果將與現有行合併。

items變量,它是 DataTable

所以,你可以使用這些選項:

items= new DataTable(); 

items.Clear(); 
items.AcceptChanges(); 

DataTable.Load

填充一個DataTable從一個值數據源使用提供的 IDataReader。如果DataTable已包含行,則將來自數據源的傳入 數據與現有行合併。

+0

非常感謝。這很好,我現在可以完成我的項目。 – Richard

+0

不客氣:) –

+0

最後一個問題, 關於datagridview是否有像這樣 - listView1.FullRowSelect = true; 因此,一旦他們選擇了一個內容,不僅一個外殼,而是整行將被選中,並且編輯datagrid上顯示的單元格將被禁用? 謝謝! – Richard