我使用代码填充GridView,将数据源设置为查询返回的数据集。所以显然,排序和分页不会像神奇般的工作,如果我使用datasourceid =一些sqldatasource。gridview排序:每次都需要重新读取?
我发现了很多关于如何在Web上执行此操作的示例,但它们都似乎每次都重新执行查询。不应该将查询的内容保存在视图状态中吗?是否有某种方法可以获取以前的查询结果并重新排序而不必返回数据库? (它是否将所有数据保存在视图状态中?如果是这样,为什么我无法得到它?将所有数据全部发送回用户的浏览器并将其全部发回,浪费所有带宽,如果没有)
此外,如果我尝试允许分页,看来我再次必须重新执行查询,每次用户转到另一页时。如果用户对页面进行排序然后页面,那么我必须记住隐藏字段或类似内容的排序顺序,以便我可以重新读取数据,重新排序,然后进入正确的页面。
鉴于当您使用数据源控件时,所有这些行为都是内置的,我想我在这里丢失了一些东西。但是考虑到所有这些例子都是这样缓慢而艰难的,如果我错过了一些东西,很多其他程序员也会错过它。
“sorked magically”我的意思是如果你使用数据源控件,你不必编写任何代码来实现分页或排序。 – Jay
是的,我知道如何使用会话数据,但我真的不喜欢这样的想法:没有可靠的方法来丢弃数据,当它没有时间需要,所以它最终会永远浮动,如果用户可以同时打开两个屏幕实例,则会遇到问题。保存在视图状态是可能的,但带宽增加一倍。通过网络读取数据的时间将超过在许多情况下重新查询数据库的时间。所以确定它是可行的,但它并不漂亮。 – Jay
好吧,我明白你在说什么......个人而言,我讨厌使用数据源控件,因为它抽象了如何在引擎盖下发生的事情,但它确实节省了大量时间。ViewState并不理想,如果您可以投入一些时间使数据丢弃更可靠,则会话可能是您的选择。 – markp3rry