轉帖|其它|編輯:郝浩|2010-12-27 14:25:22.000|閱讀 715 次
概述:最近,由于項目中GridView控件總是與AspNetPager捆綁使用,為了減少重復工作,我想設計一個新的擴展控件:讓AspNetPager的綁定工作在這個新控件內部完成,因此研究了一下這本書。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
最近,由于項目中GridView控件總是與AspNetPager捆綁使用,為了減少重復工作,我想設計一個新的擴展控件:讓AspNetPager的綁定工作在這個新控件內部完成,因此研究了一下這本書。
按書上第3章的方法定義并重載了CreateChildControl()和Render()方法
并在Render()方法中輸出了自定義的AspNetPager
private AspNetPager _expager = new AspNetPager();
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
this._expager.RenderControl(writer);
}
運行過程中發現_expager.Page=null,導致AspNetPager的方法GetHrefString()出錯
private string GetHrefString(int pageIndex)
{
....
return this.Page.ClientScript.GetPostBackClientHyperlink(this, pageIndex.ToString());
}
反復研究和查找資料,一直不得其解。
把Render()方法中的this._expager.RenderControl(writer);屏蔽,
并將CreateChildControl()方法中的
this.Controls.Add(_expager);
改寫為:
this.parent.Controls.add(_expager);
運行正常,但AspNetPager總是顯示在最后,若原先在GridView后有設計別的控件,則AspNetPager都會在這些控件后顯示;
由于沒有達到預期的目的,放棄內部綁定控件的方法,改用外部綁定,即用屬性將外部的AspNetPager傳遞給新控件,此方法簡單,但在使用新控件時要在頁面上增加綁定和初始化命令,總的來說還是沒有達到我們設計新控件的目的.
總結:
1.GridView是繼承自CompositeDataBoundControl,可以作為容器綁定控件,形成新的復合控件;
2.ASP.NET自定義復合控件若綁定較復雜的控件,綁定的控件的初始化要特別小心,最好要對此控件的原理非常熟悉;
3.如果對要綁定的控件不熟悉,最后采用屬性的方法來傳遞外部控件,并由頁面(Page)來初始化此外部控件,一般不會有問題,但要增加一些頁面的代碼量
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載