0

好吧,大脑袋这里的东西比要求更具挑战性。我有点难过。我通常只需要一个正确方向的刺激,所以准备好你的刺激棒。

我有一个包含在文本框中的选项卡控件。我想在同一表单上的列表视图上的 SelectedIndexChanged 事件期间检查所有文本框的内容。如果其中一个文本框具有与 DataTable 行不同的数据(由 ListView 项表示),我希望它询问用户是否愿意保留他们刚刚所做的更改。如果没有任何改变,我希望它只是改变选择。

所以很明显,我正在将文本框的内容与数据行中的相关列进行比较。

我可以强行检查并一次进行每个单独的检查。我宁愿想出一些巧妙的算法方法来循环遍历 tabcontrol 文本框并根据列值检查值。

有什么建议么?

编辑:我最喜欢下面的“巧妙命名的文本框”解决方案,尽管两者都很好。如果在接下来的 14 天内没有其他人有更好的想法,那么文本框的答案就会变成绿色。

4

2 回答 2

0

给文本框起一个巧妙的名称,因为名称的一部分是列/行名称。

分组文本框控件循环通过它们。对于每个控件,获取(部分)名称并将其用作对数据表的引用。检查值。

于 2009-03-03T13:30:16.273 回答
0

如果我对您的理解正确,您希望避免在每次更改时比较每个文本框,而只检查由 ListView 控件的 SelectedIndexChanged 事件驱动的更改的文本框。是对的吗?

好吧,DataRows 和 DataTables 已经实现了行版本控制和回滚,所以如果您将文本框绑定到底层行(通过编写事件来写回更改/失去焦点或使用自动化机制来完成相同的任务),然后检查 SelectedIndexChanged 上的 RowState 属性。如果 RowState 未更改,则提示用户保存。如果他保存,则提交更改,否则拒绝它们。

因此,例如,您希望在 SelectedIndexChanged 事件处理程序中使用类似的内容:

if (row.RowState == DataRowState.Modified) {
  // prompt for user input
  if (promptResult == PromptResult.Save) {
    row.AcceptChanges();
  }
  else {
    row.RejectChanges();
  }
}
于 2009-03-03T13:30:16.337 回答