2

我有一个Repeater嵌套在一个GridView. 在 的RowDataBound事件上GridView,我设置DataSource(基于行的列之一)然后绑定Repeater. 这适用于初始加载,但是我需要能够Repeater动态添加新项目。

我将一个项目附加到DataSource,将其保存到ViewState,并且我通常使用方法调用绑定的位置,我绑定到保存到的对象ViewState。反映了DataSouce变化,但页面没有。

我错过了什么?我在另一个没有嵌套的页面上有完全相同的设置,它工作得很好。

if (ViewState["RepeaterObj"]!=null)
{
   rpt.DataSource=(IList<DataTransferObject>)ViewState["RepeaterObj"];
}
else
{
   rpt.DataSource = controller.GetObj(param);
   rpt.DataBind();
}
4

3 回答 3

1

我最终通过ViewState完全停止使用来解决了这个问题,尽管我认为我的临时性DataSource会丢失,但postback事实并非如此。我最终选择了一个variable完美的班级水平。似乎我没有正确理解在postback.

于 2011-11-14T17:02:45.227 回答
0

首先,您不应该在 ViewState 中存储数据源。这几乎是你能放它的最糟糕的地方。

至于您的问题,我建议在将新项目添加到转发器时重新绑定 GridView,或者在保存新记录的事件中找到转发器并在那里重新绑定。

于 2011-10-28T18:26:10.830 回答
0

我认为问题是你没有重新绑定Repeater. 您说您更改了绑定以查看ViewState对象的方式,但您实际上是否触发了该对象的Bind发生?听起来你不是,页面只是用控件存储的当前数据重新加载ViewState

确保您Repeaters明确调用您的绑定事件以确保它正在反弹。

编辑:我怀疑它可能与您可能需要重新绑定的地方GridView有关,而不仅仅是Repeater.

于 2011-10-28T16:45:58.980 回答