可绑定控件(GridView,Repeater)如何在回发之间维护源数据

时间:2012-08-22 07:56:25

标签: asp.net data-binding gridview repeater

我使用 GridView & Repeater (以及其他类似 DropDownList )在我的应用程序中广泛控制 ObjectDataSource 组件和为 ObjectDataSource ( ObjectDataSource 上的 TypeName / SelectMethod 属性)。我最近注意到 SelectMethod 仅在

时调用
IsPostBack == false

另外,当我手动绑定时,我总是在!IsPostBack 时绑定。我从来没有好奇控件如何在回发之间维护他们的数据,直到现在(我必须创建带有排序/分页等的GridView,我想要有效地完成它)。

你能解释/提供一些描述如何完成的链接吗?

此外,我没有得到一件事:当使用 GridView 并迭代行时,有时我需要访问其 GridViewRow.DataItem 属性以获取后备对象(通常获取某种ID)。有时候它是空的 - 有时候不是。我无法弄清楚为什么。然而它是null,我仍然可以访问(例如) GridViewRow.DataKeys

由于

编辑:知道答案是否由于 ViewState ,我还有另外一个问题:如果我数据绑定100个非常繁重的业务对象,我只使用了数据绑定时很少有属性(假设我也使用OnRowDataBound事件来渲染一些额外的数据),这是否意味着整个对象被序列化了?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

他们将其存储在名为ViewState(或更准确地说是“__VIEWSTATE”)的页面上的隐藏字段中。如果您在ASPX页面上执行查看源,您将看到它。

您也可以通过访问Page的ViewState属性在ViewState中存储和检索页面的状态信息。

我从这里开始http://msdn.microsoft.com/en-us/library/ms972976.aspx

所以,是的,如果你存储了大量的大型对象,那么在页面循环中会有大量的数据传输到客户端。仔细使用,Viewstate可能很有用,但不小心使用,它可能会产生负面影响。