新足迹

 找回密码
 注册

精华好帖回顾

· Confederations Cup (2009-6-22) joaquin · 写在妈妈的生日。 (2008-12-1) chinara
· 老太自驾历经49天行程11.674公里完成了北领地,昆州之旅 (2020-6-27) yuailian · 老陶也来谈电影 - 全面包围(The Siege) 有更新(二,三,六楼) (2008-10-4) 老陶
Advertisement
Advertisement
查看: 1473|回复: 19

请教一个asp.net的问题 [复制链接]

发表于 2011-1-21 13:16 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
请教各位牛人一个asp.net的问题。把gridview绑定到datatable,由于我有几个不同的datatable,都是要绑定到同一个gridview上面。

我尝试过把几个datatable设置为页面的属性,目的是不要老是去访问数据库,但是每次我想rebind gridview的时候,第一次创建好的datatable就被清空了。所以现在每次refresh gridview,都一定要重新访问数据库。

我的问题是,能不能把几个datatable访问数据库一次,然后就保存起来,每次要更新gridview直接拿来用就可以了?我现在更新的时候是通过button click,好像一按按钮我的数据就没了。
Advertisement
Advertisement

发表于 2011-1-21 13:36 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
没太看懂你具体的问题,如果你click button之后,是postback一个新的request,你跟你上次的request从datasource这个角度来看没什么关系,你的page是新的instance,你的相应的后台logic只要不是static的,也都是新的instance,你之前的data自然没有了,除非你用cache,或者file什么的在app layer存一下,但也需要跟你的datasource rebind一下。

很多3rd party的grid control的pagination也是从database拿全部的数据,然后再在app layer作paging,其他的都dump掉,很浪费。

我做过优化的paging solution,每次在database取相应的page(不用全取),sp那边用到cte,前台要自己写点javascript request回去,app layer要写些logic render相应的当前页面,临近的几个页面,第一页/最后一页。

但避免访问database,我个人觉得overhead很大,但可以根据popularity cache一些东西。

[ 本帖最后由 乱码 于 2011-1-21 14:38 编辑 ]

评分

参与人数 1积分 +3 收起 理由
uowzd01 + 3 我也怀疑和asp.net的life circle有关

查看全部评分

发表于 2011-1-21 14:44 |显示全部楼层
此文章由 huazhb 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 huazhb 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你这个问题没有讲清楚. 你的datatable是在哪里创建的, 是在代码中还是放在页面的datasource上?如果是放在页面上的datasource, 那每次页面刷新, datasource的数据都要重新load的. 你想把数据保存起来, 那就是放在session或cache中了, cache是全局的, session是每个客户端独立的. 你可以在page load的时候laod 数据保存一下.

评分

参与人数 1积分 +3 收起 理由
uowzd01 + 3 谢谢指教

查看全部评分

发表于 2011-1-21 14:51 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
谢谢指教,就是说每次button click之后整个page就是一个新的instance了,难怪datatable都变null了。

这也解释了为什么gridview翻页的时候,也是一个新的instance,所以在pageindexchanged event里面要重新读取数据,(我当时就想,数据不是已经有了嘛,干嘛又load一遍)

但是那些textbox,label什么的数据都还在是怎么回事呢?它们不是也应该象我的datatable一样被清空吗?是不是这些server control有特殊待遇,asp.net会保存它们以前的数据?

发表于 2011-1-21 14:59 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-1-21 15:51 发表
谢谢指教,就是说每次button click之后整个page就是一个新的instance了,难怪datatable都变null了。

这也解释了为什么gridview翻页的时候,也是一个新的instance,所以在pageindexchanged event里面要重新读取数据,(我当时就 ...


page life cycle在page init 之后和page load之前有两个事件:1. load viewstate 2.load postback data

对于controls,他们recovery state都在这两个阶段进行,(control tree在init之前就建好了),他们根据uniqueID($seperated)来populate control tree, textbox不用view state,它用postback data.

label分开看,static label是htmlwriter写上去的,动态的label(server)是用viewstate来恢复状态的.

[ 本帖最后由 乱码 于 2011-1-21 16:05 编辑 ]

评分

参与人数 1积分 +3 收起 理由
uowzd01 + 3 偶对你的景仰如滔滔江水

查看全部评分

发表于 2011-1-21 15:06 |显示全部楼层
此文章由 huazhb 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 huazhb 所有!转贴必须注明作者、出处和本声明,并保持内容完整
hehe, 指出楼上一个小错误, textbox不是不用viewstate, 而是viewstate的值被postback的值个覆盖了.


原帖由 乱码 于 2011-1-21 15:59 发表


page life cycle在page init 之后和page load之前有两个事件:1. load viewstate 2.load postback data

对于controls,他们recovery state都在这两个阶段进行,(control tree在init之前就建好了),textbox不用view state,它 ...
Advertisement
Advertisement

发表于 2011-1-21 15:12 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
太感谢了,以前老是机械地去背asp.net life circle,觉得很枯燥,也没什么用

这次结合实际的问题才知道为什么life circle这么重要了,看来这个应该算是asp.net入门的基本知识,只是拖控件是肯定不懂这些的

其实象我这个问题,还有grideview翻页,所有的data已经都在那里了,难道没有办法不postback来更新page吗?javascript行不行?

发表于 2011-1-21 15:17 |显示全部楼层
此文章由 huazhb 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 huazhb 所有!转贴必须注明作者、出处和本声明,并保持内容完整
所有的data在你看到页面的时候都被丢弃了. 只有显示在页面的数据才被保存在viewstate中. Ajax 就是用来动态加载数据的. 你看看jquery 和微软的mvc把.

评分

参与人数 1积分 +3 收起 理由
uowzd01 + 3 感谢分享

查看全部评分

发表于 2011-1-21 15:21 |显示全部楼层
此文章由 coin_king 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coin_king 所有!转贴必须注明作者、出处和本声明,并保持内容完整
把你的DATATABLE放在viewstate里,在PAGELOAD里bind TO GRID,那样就不用从DATABASE里读了

评分

参与人数 1积分 +3 收起 理由
uowzd01 + 3 感谢分享

查看全部评分

发表于 2011-1-21 15:22 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Suggestion only:
Don't waist your time to learn asp.net life cycle
MVC/Jquery much better ?

[ 本帖最后由 典 于 2011-1-21 15:34 编辑 ]

发表于 2011-1-21 15:24 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-1-21 15:12 发表
太感谢了,以前老是机械地去背asp.net life circle,觉得很枯燥,也没什么用

这次结合实际的问题才知道为什么life circle这么重要了,看来这个应该算是asp.net入门的基本知识,只是拖控件是肯定不懂这些的

其实象我这个问题,还有grideview翻页,所有的data已经都在那里了,难道没有办法不postback来更新page吗?javascript行不行?


There are some grid plug-ins, allow you to paging / sorting / hiding / grouping without sending any request back to the server. Everything can be done in javascript.
Advertisement
Advertisement

发表于 2011-1-21 15:34 |显示全部楼层
此文章由 IsDonIsGood 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 IsDonIsGood 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-1-21 16:24 发表


There are some grid plug-ins, allow you to paging / sorting / hiding / grouping without sending any request back to the server. Everything can be done in javascript.

MVC is not everything. Plenty of asp.net applications survives.

发表于 2011-1-21 15:39 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 huazhb 于 2011-1-21 16:17 发表
所有的data在你看到页面的时候都被丢弃了. 只有显示在页面的数据才被保存在viewstate中. Ajax 就是用来动态加载数据的. 你看看jquery 和微软的mvc把.

很惊讶,我还以为我的datatable至少存在内存里面一直到postback才被清空呢

发表于 2011-1-21 15:40 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 liedong 于 2011-1-21 16:21 发表
把你的DATATABLE放在viewstate里,在PAGELOAD里bind TO GRID,那样就不用从DATABASE里读了

很好的建议,可惜今天没分了,明天补上

发表于 2011-1-21 15:42 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2011-1-21 16:24 发表


There are some grid plug-ins, allow you to paging / sorting / hiding / grouping without sending any request back to the server. Everything can be done in javascript.

能说一下gridview翻页如何用javascript实现吗?

发表于 2011-1-21 15:43 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 IsDonIsGood 于 2011-1-21 16:34 发表

MVC is not everything. Plenty of asp.net applications survives.

我们公司全是asp.net,呵呵

下一步打算学mvc,不过还是想先搞清楚asp.net的长处和短处
Advertisement
Advertisement

发表于 2011-1-21 15:43 |显示全部楼层
此文章由 huazhb 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 huazhb 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果你是公司里开发项目的话, 最后不要这么做, 页面viewstate数据一多加载回比较慢的, 尽量用分页技术把. 只加载客户要看的数据.最好也不要把数据放到session中. Cache中最好也只放一些不太改变的数据, 比如城市阿, 国家之类的.
原帖由 uowzd01 于 2011-1-21 16:40 发表

很好的建议,可惜今天没分了,明天补上

发表于 2011-1-21 15:46 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
初步感觉asp.net可能更productive一点吧,还请各位牛人指教

发表于 2011-1-21 16:13 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-1-21 15:42 发表

能说一下gridview翻页如何用javascript实现吗?


That's not for asp gridview, it's for plug-ins.
Steps are:
1. configurate the grid (mapping / sorting / paging / grouping...)
2. make ajax call,
3. get json data back from the server,

then  the plug in will do the next for you  
-------

For ASP gridview, we need to configure it, bind data carefully, it will do the job...if we don't care about the performance.

[ 本帖最后由 典 于 2011-1-21 16:16 编辑 ]

2010年度奖章获得者

发表于 2011-1-21 16:24 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2011-1-21 16:43 发表

我们公司全是asp.net,呵呵

下一步打算学mvc,不过还是想先搞清楚asp.net的长处和短处


Its like sex

You can try different girls

but your capability is determined by your dick.

Peace.
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部