これがDataGridViewの基本的な機能であることは知っていますが、何らかの理由で機能させることができません。ユーザーが[保存]ボタンをクリックしたときに、WindowsフォームのDataGridViewに加えられた変更をデータベースに送信させたいだけです。
次のように、DropDownListでのユーザー選択によってトリガーされる関数に従ってDataGridViewにデータを入力します。
using (SqlConnection con = new SqlConnection(conString))
{
con.Open();
SqlDataAdapter ruleTableDA = new SqlDataAdapter("SELECT rule.fldFluteType AS [Flute], rule.fldKnife AS [Knife], rule.fldScore AS [Score], rule.fldLowKnife AS [Low Knife], rule.fldMatrixScore AS [Matrix Score], rule.fldMatrix AS [Matrix] FROM dbo.tblRuleTypes rule WHERE rule.fldMachine_ID = '1003'", con);
DataSet ruleTableDS = new DataSet();
ruleTableDA.Fill(ruleTableDS);
RuleTable.DataSource = ruleTableDS.Tables[0];
}
私の保存関数には、基本的に次のものがあります(要点をつかむために、その周りのコードの一部を削除しました)。
using (SqlDataAdapter ruleTableDA = new SqlDataAdapter("SELECT rule.fldFluteType AS [Flute], rule.fldKnife AS [Knife],
rule.fldScore AS [Score], rule.fldLowKnife AS [Low Knife],
rule.fldMatrixScore AS [Matrix Score], rule.fldMatrix AS [Matrix]
FROM dbo.tblRuleTypes rule WHERE rule.fldMachine_ID = '1003'", con))
{
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(ruleTableDA);
DataTable dt = new DataTable();
dt = RuleTable.DataSource as DataTable;
ruleTableDA.Fill(dt);
ruleTableDA.Update(dt);
}
さて、コードを編集して次のようにしました。コマンドをビルドし、DataGridView(RuleTable)に基づいてDataTableを作成し、DataAdapterにDataTableを入力して、データベースを更新します。現在、ruleTableDA.Update(dt)は、「同時実行違反:UpdateCommandが予想される1レコードのうち0に影響を与えました」という例外をスローしています。