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