我看不出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