C# 正在更新DataGridView的数据源-未删除旧行

C# 正在更新DataGridView的数据源-未删除旧行,c#,sql,.net,sqlite,datagridview,C#,Sql,.net,Sqlite,Datagridview,我有一个带有DataGridView的应用程序。我使用SQLite数据库并将其表设置为DataGridView的数据源:我使用SQLiteDataAdapter获取数据集并将其设置为数据源: grid.AutoGenerateColumns = false; grid.DataSource = ds.Tables[0].DefaultView; grid.Columns["criteriaId"].DataPropertyName = "rowid"; grid.Columns["crite

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

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";
到目前为止,一切似乎都如我所愿。但是我想更新这个数据源,用我从另一个数据源获得的另一个数据集的其他数据替换所有行。于是我写道:

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]);
其中adapter是我用来首先从DB读取数据的SQLiteDataAdapter。这里我遇到了一个问题:不是删除所有以前的数据并将新行保存到数据库中,而是所有以前的记录仍在我的数据库中,并且添加了来自新数据源的所有新行。所以它只是添加行,而不是替换行。在adapter.Updateds.Tables[0]上方的一行中;调试时,我可以看到ds.Tables[0]只有来自新源的行。那么为什么不删除旧的行呢?我能做些什么使它工作

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


有什么想法吗?

也许我没找到,但是你在哪里把旧的PKs复制到新行?如果只是用新键写行,为什么要更新旧行?哪个呢?根据DBMS的不同,我猜更新可能会失败,或者悄悄地恢复为插入..好吧,替换旧行并不是指一对一地替换它们,就像用另外3行替换3行一样。我想删除以前的行并插入新的行。保存时,新行将获得新的rowid。它们已保存到数据库中,但我不知道为什么不删除旧行。那么,您需要明确地删除旧行。正如您在我的代码中所看到的,我正在调用originalTable.rows.Clear;在我的原始数据源上,它使行为空,但不知何故它们并没有从数据库中删除。那么我应该用另一种方法吗?清除数据表的行与从数据库中删除它们无关。您需要发出SQLDELETE命令。