好吧伙计们,更新DataGrid更改为数据库?
经过许多阅读和找到解决方案,我只需要问这个。 我已经寻找它,但它并没有帮助我很好,因为它应该理清了这一点。 此外,原谅我的语法错误,如果任何...
什么问题? 我加载了一个组合框一个WPF的形式。这种组合框在我的数据库中的所有表中获取所有的名字。我选择一个表名并按下一个按钮来填充所选表的DataGrid(WPF)。这一切都完美。但是,当我更改单元格或添加/删除行或列时,我必须将其更新到数据库。 这是我卡住的地方。我通过一个不太理想的方式来工作。这就是为什么我问是否有更好的解决方案。
//fill the datagrid with data from chosen table in combobox!
selectedTable = cboxTables.SelectedItem.ToString();
dataset = db.getDataFromTable(selectedTable);
datatable = dataset.Tables[selectedTable];
datagridAdmin.ItemsSource = datatable.DefaultView;
当DataGrid中的选择发生了变化,我设置了“提交”按钮为活动至极调用此代码:
db.updateTable(selectedTable, datatable);
注意,“DB”是从我databaseclass一个实例。方法如下:
public bool updateTable(String tableName, DataTable datatable)
{
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(thisConnection.ConnectionString, SqlBulkCopyOptions.CheckConstraints))
{
//Set destination table name
//to table previously created.
bulkcopy.DestinationTableName = tableName;
try
{
thisCommand = new SqlCommand("DELETE FROM " + tableName, thisConnection);
thisCommand.ExecuteNonQuery();
bulkcopy.WriteToServer(datatable);
}
catch (Exception ex)
{
logger.WriteLine(applicationName, ex.Message);
}
}
}
但问题是,第一列是一个自动增量ID,每次提交更改的DataGrid时都会不断提高。 没有更好的方法来做到这一点?
谢谢!
PS:我编码在Visual Studio 2010中使用C#中的WPF。
你说不行的TRUNCATE选项。它表示更新成功,但刷新后仍然存在旧值。 而关于SqlCommandBuilder,我试图实现它,但我怎么才能让它生成一个UPDATE命令,当它需要一个SqlCommand,我不更新之前使用? – Joey 2012-01-31 18:23:50
我纠正了我的truncate语句,并尝试通过使用SqlDataAdapter来扩展我的意思。虽然很难说如何在没有看到你的源代码的情况下使用它,但我试图尽可能通用。 – GarethD 2012-02-01 00:12:06
非常感谢。这将做足够我认为。将在下周尝试制定你的榜样。如果它不起作用,我会回来解释问题。 – Joey 2012-02-01 07:51:19