在算法上检查二十几个值,对数据列的文本框

时间:2009-03-03 13:23:02

标签: c# winforms comparison iteration

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

我有一个用文本框覆盖的tabcontrol。我想在同一表单上的listview上的SelectedIndexChanged事件期间检查所有文本框的内容。如果其中一个文本框的数据与DataTable行不同 - 由ListView项表示 - 我希望它询问用户是否希望保留他们刚才所做的更改。如果没有任何改变,我希望它只是改变选择。

显然,我正在将文本框的内容与数据行中的关联列进行比较。

我可以强行检查并逐个检查每个人。我宁愿想出一些聪明的算法来循环tabcontrol文本框并根据柱状值检查值。

有什么建议吗?

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

2 个答案:

答案 0 :(得分:0)

为文本框指定一个聪明的名称,因为名称的一部分是列/行名称。

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

答案 1 :(得分: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();
  }
}