2016-09-24 44 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