问题描述
我对取出的DataTable尝试了下列两种方法来删除某一行数据:1:resultDt.Rows[i].Delete();resultDt.AcceptChanges();2:resultDt.Rows.RemoveAt(i);第一次进这个列表页面时,需要被删除的行都被删除了,展示正确。然后我在页面点击一个超链接进到另一个页面,然后点击浏览器上的后退按钮返回列表页面,这个时候先前被删除的行又重新出现了。请问这是怎么回事呢?需要怎么修改呢?
解决方案
解决方案二:
那说明数据库的数据没删除成功啊
解决方案三:
我不需要删除数据库的数据。只是需要在程序里进行一次筛选而已。
解决方案四:
首先你这样删除又不是完全在数据库中删除了。所以点击浏览器退回后因为又请求这个页面了。因此数据又被重新绑定了。
解决方案五:
再补充一下,第一次进页面是,通过断点可以看到程序进了删除指定行的那句话。但是点后退按钮时,根本就没有进那句话,也就是说根本没有再操作一次数据库,貌似DT是从什么缓存中读出来的,而这个缓存中的DT中那几行是没有被删除的。但是据我所知,Rows.RemoveAt(i)是会真正删除指定行的,浏览器中就算有缓存,存的也应该是这个被删除了行的DT啊。
解决方案六:
引用4楼的回复:
再补充一下,第一次进页面是,通过断点可以看到程序进了删除指定行的那句话。但是点后退按钮时,根本就没有进那句话,也就是说根本没有再操作一次数据库,貌似DT是从什么缓存中读出来的,而这个缓存中的DT中那几行是没有被删除的。但是据我所知,Rows.RemoveAt(i)是会真正删除指定行的,浏览器中就算有缓存,存的也应该是这个被删除了行的DT啊。
那就是你点击后退按钮,重新从数据库加载了DT
解决方案七:
首先你没有真正删除。你后退就重新请求这个页面。然后又重新加载数据了。你应该在pageload里面处理
解决方案八:
或者屏蔽后退按钮。
解决方案九:
回复5、6楼我明白是重新请求这个页面了,但是,这时候无非有两种可能,一:重新请求页面,并且重新操作数据库查询数据。可是,我通过断点调试,程序并没有从数据库重新请求数据。二:重新请求页面,但是不重新操作数据库,那DT就只有可能是从缓存里来的。而在我第一次请求页面时,已经用Rows.RemoveAt(i)方法删除了指定的行,那缓存里为什么会存了一个没有被删除行的DT呢?
解决方案十:
pageload里面处理也不行,点后退按钮时,我发现根本就没再进pageload里面了。
解决方案十一:
甚至,<scriptlanguage="ecmascript">functioninit(){varsize='<%=dt.Rows.Count%>';alert(size);}</script></head><bodyonload="init();">这是我写在页面上的第二次根本都冇alert哒第二次指的是点后退按钮的时候
解决方案十二:
你第2次varsize='<%=dt.Rows.Count%>';这个地方估计就出错了你在onload="init();"改成onload="alert('123');init();"
解决方案十三:
终于搞好了,发现是VisualStudio2010自带的服务器的问题,把程序用操作系统自带的IIS建个网站再测试就没问题了.另外,发现就算是用VisualStudio2010自带的服务器,只要是用傲游访问也没问题,但是用ie9访问就有问题。怀疑是VisualStudio2010自带的服务器以及IE9的内部缓存机制有关。
解决方案十四:
按你说的后退又出现了我感觉很正常,不知道,还是接分把
解决方案十五:
禁止浏览器缓存