如何在不使用 datagridview 的情况下编辑绑定到组合框的数据表中的数据?

Posted

技术标签:

【中文标题】如何在不使用 datagridview 的情况下编辑绑定到组合框的数据表中的数据?【英文标题】:How do I edit data in a data table that is bound to a combo box without using a datagridview? 【发布时间】:2017-03-09 22:33:20 【问题描述】:

我正在使用通过主键绑定到数据表的组合框。通过从下拉列表中选择一个值,我可以在一个表单中填充多个文本框。我可以轻松地将新记录添加到数据表中。有时我需要编辑现有记录,但我无法发现与组合框中的选择相对应的行的“索引”,即使我可以填充文本框。是否有任何方法可以与“datarow”一起使用来确定“指针”指向的记录?如果是这样,那么我可以引用该数据行并将新数据写入数据表,然后使用数据适配器进行更新......任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您正在尝试解决一个不存在的问题。您不需要知道该行的索引或该行的索引。你应该做的是:

    将您的DataTable 绑定到您在设计器中添加的BindingSource。 将您的BindingSource 绑定到您的ComboBox 和您的TextBoxes。 在ComboBox 中选择记录,在TextBoxes 中随意编辑。 需要保存时,请在BindingSource 上致电EndEdit,以确保将任何待处理的编辑提交到DataTable。 使用相同的数据适配器来保存 DataTable 中的更改,就像您最初填充它时使用的那样。

绑定看起来像这样:

myDataAdapter.Fill(myDataTable)
myBindingSource.DataSource = myDataTable

With myComboBox
    .DisplayMember = "DisplayColumn"
    .ValueMember = "PKColumn"
    .DataSource = myBindingSource
End With

myTextBox.DataBindings.Add("Text", myBindingSource, "EditColumn")

节省看起来像这样:

myBindingSource.EndEdit()
myDataAdapter.Update(myDataTable)

您无需关心编辑了哪些行以及它们在DataTable 中的位置,因为Update 只会保存所有更改。

【讨论】:

您的代码仅适用于一个“异常”。当现有记录使用相同的主键时,约束会引发异常。我可以使用嵌套的“Try's”来跳过异常。这似乎可行,但是否有另一种方法可以一开始就避免异常? 我不确定你的意思。您是说您正在尝试使具有与现有记录相同 PK 的记录失效?你做错了什么,但如果没有清楚地解释你在做什么,我无法告诉你有什么问题。 实际上,我建议您考虑关闭此问题并发布一个新问题,其中包含您当前代码和操作的完整详细信息以及所发生的确切情况的描述。

以上是关于如何在不使用 datagridview 的情况下编辑绑定到组合框的数据表中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不超过最大文档大小的情况下编写聚合?

如何在不单独编写的情况下编写具有多个字符[,>等的字符串[重复]

如何在不使用 datagridview 的情况下编辑绑定到组合框的数据表中的数据?

如何在不安装 IDE 的情况下编译和运行此 Delphi 代码?

如何在不使用flutter_test.dart包的情况下编写用于在flutter集成测试中点击屏幕点的测试脚本?

如何在不重复自己的情况下编写三元运算符(又名 if)表达式