Я знаю, что это базовая функция DataGridView, но по какой-то причине я просто не могу заставить его работать. Я просто хочу, чтобы DataGridView в моей форме Windows отправлял любые изменения, внесенные в нее, в базу данных, когда пользователь нажимает кнопку «Сохранить».
Я заполняю DataGridView в соответствии с функцией, вызванной выбором пользователя в DropDownList следующим образом:
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);
}
Хорошо, поэтому я отредактировал код, выполнив следующее: создайте команды, создайте DataTable на основе DataGridView (RuleTable), заполните DataAdapter с помощью DataTable и обновите базу данных. Теперь ruleTableDA.Update (dt) выдает исключение «Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей.»