既にDataRowを渡している場合は、DataTableとそのテーブルの行を識別するものを渡すことができます。フォームの終了時にすぐに変更をコミットする場合は、アダプタ(オプション)を使用します。次に、そのテーブルの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