在一个页面。存在一个按钮和一个列表、点击按钮。弹出窗体、窗体显示的数据也就是列表的数据。也就是说窗体也是一个grid还存在一个按钮。可以对这个窗体列表做修改、但只是操作缓存的数据。需点击弹出窗体的按钮才进行更改的操作。假如我第一次点击弹出窗体。修改了值。没有操作数据库、把窗体关闭。再次弹出,他获取的是修改了的值。我需要获取最新数据。假如原始数据100.我做修改成10.关闭窗体再次弹出时。我需要取100.而不是10
你的逻辑乱了
数据应该分原始数据(不管来源是缓存还是数据库)和临时数据
这两个本身就不能混在一起,加载时取得是原始数据,而被操作的应该是临时数据。当确定要更改时才把临时数据变成原始数据
是啊。我点击减免的时候才操作原始数据。在每行数据修改后有个保存。这个保存则是操作临时数据。当我没操作减免时。弹出窗体关闭。再次进入弹出窗体应该取的是原始数据,而不是临时数据
@我二我快乐: 从你的描述里没有看出你区分了"原始数据"和"临时数据"这两个概念。你指的原始数据到底是数据库还是缓存,而你所指的临时数据又是什么,在哪里?还有保存按钮里的逻辑是你自己实现的吗
@nicky0227: 我的弹出窗体绑定是临时数据。我的原始数据时数据库里的。临时数据是缓存数据。我不知道这样理解正确吗。能帮我讲解下吗。谢谢你
@我二我快乐:
这么说你的原始数据就是数据库,你的临时数据就是缓存(Session)
1.在这个前提下那你无论什么时候弹出窗体,窗体在弹出时绑定的应该都是再从数据库取的数据(除非你不动Session),为什么还要从Session里面去取呢?因为你点保存的时候会导致Session变化啊
2.或者你把Session["ds"] as DataSet 这里修改下,用一个新的DataSet去复制原来的DataSet,总之就是不要直接操作Session了,而去操作一个新对象
@nicky0227: 减免操作的时候需要取到session值。如果不取seesion值得话,每次取得都是原始数据。直接减掉原始数据。你说用克隆对吗
@我二我快乐: 楼上 大叔也说了的,你要保证你的原始数据的纯洁性,在一切更改还没有确定的情况下,原始数据不要动,如果你必须要动Seesion,那就要么再克隆一个出来,要么每次进入弹出窗体时从数据库取值,你要明白对象都是引用类型的,Session也不例外,你在表格里的修改同时也改变了Session
@nicky0227: 关闭弹出窗体时、后台事件不触发、我的代码量不足。不知道怎么处理了。后面解决是用克隆、谢谢你们。
你这是逻辑不清楚造成的。
1、假设有一个变量或者对象 Person
2、打开一个窗口,修改后,可能希望保存,可能不希望保存,如何保证Person的纯洁性?
3、var newPerson=Person.clone
4、操作newPerson
5、保存时,遍历newPerson的属性,写回Person,不保存,则啥事都不用干。
6、至于数据不数据库,那与此无关。
我操作的是缓存。不是源数据,需要操作减免按钮时。我的数据才做改变
@媛媛HY: 请你仔细看我说的。
这个跟缓不缓存没有关系,跟源不源数据也没有关系。
这个就是当你想要提供保存与不保存数据时的技巧。
@爱编程的大叔: 恩恩。我操作的是临时数据。只有操作减免时,才操作原始数据。现在我关闭窗体。再次进入窗体时需要取到原始数据。而不是临时数据
弹窗的时候再次读取数据库的最新数据。
我关闭时。在批量减免时。后台代码不执行了。本来想在前台刷新。可一刷。数据都不绑值了