如果您已經傳入一個DataRow,那麼您可以傳遞DataTable和其他標識該表中該行的東西。也可以選擇一個適配器,如果你想立即在form exit上提交更改。然後你可以創建該表的DataView。並將每個編輯控件綁定到該視圖中的字段。事情是這樣的:
public partial class EditForm : Form
{
DataRow row = null;
DataView view;
SqlDataAdapter adapter;
public EditForm(SqlDataAdapter adapter, DataTable table, int rowId)
{
InitializeComponent();
this.adapter = adapter;
view = table.DefaultView;
view.RowFilter = $"ID = {rowId}";
if (view.Count == 0) throw new Exception("no such row");
DataRowView dvr = view[0];
row = dvr.Row;
datebox.DataBindings.Add(new Binding("Value", view, "DATE"));
stringbox.DataBindings.Add(new Binding("Text", view, "O_STRING"));
this.FormClosing += EditForm_FormClosing;
}
private void EditForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (row.RowState == DataRowState.Modified) adapter.Update(new DataRow[] { row });
}
}
以上假設你的表中有一個名爲ID
鍵列和領域DATE
和O_STRING
。
這將爲您節省創建中間自定義類實例的麻煩,該實例基於該行,將值移入和移出各種對象,並自動將RowStatae設置在原始表中。
考慮從DataGridView中更新數據庫。 (例如:[1](https://stackoverflow.com/q/27760744/3773066),[2](https://stackoverflow.com/q/8653523/3773066))從後者考慮使用[DataAdapter ](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/updating-data-sources-with-dataadapters)。 – OhBeWise