我知道这是 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,用 DataTable 填充 DataAdapter,然后更新数据库。现在 ruleTableDA.Update(dt) 抛出异常“并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条。”
最佳答案
我认为这里有几个问题: 要记住的顺序是,当您加载网格时,它已经指向一个数据表/集。 当您在网格中键入内容时,更改会暂时保存到绑定(bind)到网格的数据表中。因此,您不希望每次保存时都创建数据表,因为对现有数据表所做的更改将被忽略。 第二个问题是您可能不需要每次都创建绑定(bind)源,因为就像第一点一样,如果网格显示数据,则已经有一个绑定(bind)源。 第三个问题是 SQLCommandBuilder 类具有 GetInsertCommand、GetUpdateCommand 等方法,必须使用这些方法才能实际获取适当的命令。
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);
}
关于c# - WinForms DataGridView - 更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2623548/