更新DataGridView的DataSource - 未删除旧行

时间:2014-06-07 09:59:05

标签: c# sql .net sqlite datagridview

我有一个DataGridView应用程序。我使用SQLite数据库并将其表作为DataSource设置为我的DataGridView:我使用SQLiteDataAdapter获取DataSet并将其设置为DataSource:

grid.AutoGenerateColumns = false;
grid.DataSource = ds.Tables[0].DefaultView;


grid.Columns["criteriaId"].DataPropertyName = "rowid";
grid.Columns["criteriaName"].DataPropertyName = "name";
grid.Columns["criteriaDesc"].DataPropertyName = "description";
grid.Columns["criteriaDirection"].DataPropertyName = "direction";

到目前为止,一切似乎都在按照我的意愿行事。但是我想更新这个DataSource,用来自另一个源的另一个数据集中的其他数据替换所有行。所以我写道:

var originalDs = grid.DataSource as DataView;
var originalTable = originalDs.Table;
originalTable.Rows.Clear();

foreach (DataRow row in ds.Tables[0].Rows)
{   
    var newRow = originalTable.Rows.Add();

    foreach (DataColumn column in ds.Tables[0].Columns)
    {
        object item = row[column];
        var columnName = column.ColumnName;
        if (originalTable.Columns[columnName] != null)
        {
            newRow[columnName] = item;
        }
    }
}

尽管如此,它按预期工作,我的DataGridView中的所有行都被新数据替换。但。现在我正在尝试使用这些更改来更新底层数据库,所以我正在调用:

var cmdb = new SQLiteCommandBuilder(adapter);
adapter.UpdateCommand = cmdb.GetUpdateCommand();

var cm = (CurrencyManager)grid.BindingContext[grid.DataSource, grid.DataMember];
cm.EndCurrentEdit();

grid.EndEdit();
adapter.Update(ds.Tables[0]);

其中,适配器是SQLiteDataAdapter,我曾经首先从DB读取数据。在这里,我遇到了一个问题:不是删除所有以前的数据并将新行保存到数据库,所有以前的记录仍然在我的数据库中,并且添加了来自新数据源的所有新行。所以它只是添加而不是替换行。在我调试的adapter.Update(ds.Tables[0]);以上的行中,我可以看到ds.Tables [0]只有来自新源的行。那么为什么不删除旧行呢?我能做些什么才能让它发挥作用?

当我使用GUI手动删除DataGridView中的行,然后以相同的方式将其保存到数据库时,数据库中的Deletng行有效。

有什么想法吗?

0 个答案:

没有答案