好的大脑在这里比挑战要求更具挑战性。我有点难过。我通常只需要向正确的方向刺激,所以准备你的刺戳棒。
我有一个用文本框覆盖的tabcontrol。我想在同一表单上的listview上的SelectedIndexChanged事件期间检查所有文本框的内容。如果其中一个文本框的数据与DataTable行不同 - 由ListView项表示 - 我希望它询问用户是否希望保留他们刚才所做的更改。如果没有任何改变,我希望它只是改变选择。
显然,我正在将文本框的内容与数据行中的关联列进行比较。
我可以强行检查并逐个检查每个人。我宁愿想出一些聪明的算法来循环tabcontrol文本框并根据柱状值检查值。
有什么建议吗?
编辑:我最喜欢“巧妙命名的文本框”解决方案,尽管两者都很好。如果在接下来的14天内没有其他人有更好的想法,那么文本框的答案就会变为绿色。
答案 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();
}
}