我看不出webpart有什么问题获取对web部件B的引用并调用public/internal方法/属性或订阅处理程序来处理公共/内部事件。当做这件事时提一点:EnsureChildControls。我亲眼目睹了一个web界面对PreRender运行清晰,而另一个webpart甚至没有运行CreateChildControls。
从web部件A,取你参考的WebPart B(在这种情况下的WebPart B是的日历),像这样:
private Calendar _calendarWP = null;
public Calendar CalendarWP
{
get
{
if (_calendarWP != null)
return _calendarWP;
else
foreach (System.Web.UI.WebControls.WebParts.WebPartZone zone in this.WebPartManager.Zones)
foreach (System.Web.UI.WebControls.WebParts.WebPart webpart in zone.WebParts)
if (webpart is Calendar)
{
_calendarWP = (Calendar)webpart;
_calendarWP.EnsureChildControls();
return _calendarWP;
}
return null;
}
}
现在你可以做这样的事情取得一些新的数据和更新,如日历所以:
IEnumerable newData = SomeDataProvider.GetNewData(args);
CalendarWP.someGridView.DataSource = newData;
CalendarWP.someGridView.DataBind();
或许让web部件折腾到自身的引用到的WebPart B上它可以使用web部件A的公共/内部属性去为自己获取数据:
CalendarWP.UseWPAToFetchData(this);
这有点讨厌:D – 2008-10-01 19:48:01