【发布时间】:2021-10-11 20:45:28
【问题描述】:
在我的应用程序中有这样的要求:
在一个表单中有一个组合框和 4 个文本框。组合框始终包含 1...10 的值范围。根据组合框中选择的值,我需要从数据库中读取与所选值对应的 4 个数据项,并将这些值显示在 4 个文本框中。因此,对于组合框中的每个值,数据库中有 4 个值。
此外,用户可以通过编辑 4 个文本框中的值来更改这些值。
例如假设组合框中当前选择的值为1。因此从数据库中读取记录1对应的数据并显示在4个文本框中。如果用户没有编辑文本框中的任何值并选择条目 2(或除 1 之外的任何其他值),则从数据库中获取与新选择的值(即 2)对应的数据并显示在 4 个文本框中。但是,如果用户通过在四个可用文本框中的任何一个中键入来编辑任何值,则对应于记录 1 的那些新值应保存到数据库中,然后再切换到新选择的条目,即 2。
为此,我在组合框的“SelectedIndexChanged 事件处理程序”中编写了一些代码。在那里我检查用户是否更改了任何值。如果是,我会提示用户保存数据。保存数据后,组合框会显示用户新选择的值,即 2(4 个文本框会显示记录 2 对应的数据)。 上述所有功能都可以正常工作。但是还有一个附加要求“如果对数据库的保存操作失败,则组合框中的初始值应与用户编辑的数据(在文本框中)一起显示,这意味着如果数据库写入失败,我必须显示当前选择的值 1 没有切换到新选择的值 2"。
在 SelectedIndexChanged 处理程序中,我尝试编写以下代码。
If (DatabaseWriteFails)
{
ComboBox->SelectedIndex = previous_value; (previous_value is 1 in our example)
}
但是上面的代码不起作用(我想是因为我们试图从 SelectedIndexChanged 处理程序本身更改选定的值)。当我们进入 SelectedIndexChanged 处理程序时,我可以看到 ComboBox->SelectedValue 已更改为新选择的值,即 2。
问题是“一旦我们进入 SelectedIndexChanged 处理程序,我们如何才能回到上一个条目”?任何帮助表示赞赏。谢谢。
【问题讨论】:
-
我觉得你让生活变得很辛苦;从问题的描述来看,使用数据绑定很容易
-
@CaiusJard 此外,这是一个奇怪的逻辑。 “如果我不能保存,我就扔掉我的更改”。当您始终可以选择前一个值并再次加载前 4 个值时
-
@CaiusJard:谢谢你的建议。我以前没有使用过数据绑定。我对 C# 真的很陌生。我会检查这个。希望能帮助解决问题
-
@T.S. : 可能是我描述的问题不够好。我不会扔掉我的改变。如果出现错误,我将再次显示未保存的条目并为用户提供重试选项。