如果您已经传入一个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