好吧夥計們,更新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