C#Repeater控件
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
Repeater?一個只會綁定數(shù)據(jù)并顯示數(shù)據(jù)的低級控件?哦~誰告訴你的? Repeater因?yàn)樗撵`活性和擴(kuò)展性很高,備受很多程序員青睞。我的一個.net群成員曾因?yàn)楸容^Repeater和GridView而爭得面紅耳赤。我個人也是因?yàn)镚ridView有些功能無法實(shí)現(xiàn),才開始研究Repeater的。 當(dāng)然了,我對GridView也不是太熟悉。無法客觀的比較兩者的優(yōu)劣,但因?yàn)镚ridView的高度封裝性注定了他的靈活性不及Repeater,而且Repeater做出來的東西比較“干凈”(個人覺得)。
本著分享為原則,特此將自己這段時間的研究成果在年前展現(xiàn)給大家。 這里我將整合很多Repeater的應(yīng)用,內(nèi)容長是一定的(我會盡量以最簡單明了的形式展現(xiàn),我知道讀者希望這樣。因?yàn)槲以趯W(xué)別人東西的時候也希望這樣。呵呵)。但每個內(nèi)容板塊都是可以獨(dú)立的。OK,現(xiàn)在就開始了。 目 錄 1.Repeater的嵌套使用 2.Repeater里的按鈕單擊事件 3.獲取子Repeater里的控件 4.Repeater里單選按鈕互斥問題 5.Repeater中記錄單選按鈕選擇狀態(tài)并顯示 6.Repeater無刷新分頁
1.Repeater的嵌套使用: 參考代碼: 前臺: <asp:Repeater ID="questionTable" runat="server" </itemtemplate> 如果你仔細(xì)看了下結(jié)構(gòu),你是否會思考一個問題。如何對里面嵌套的Repeater進(jìn)行數(shù)據(jù)綁定呢? 接下來看后臺代碼。 后臺: //用Repeater的ItemDataBound事件 protected void questionTable_ItemDataBound(object sender, RepeaterItemEventArgs e) //接下來就可以把你的數(shù)據(jù)源給子Repeater了 小結(jié): 什么時候用嵌套呢?當(dāng)要綁定的數(shù)據(jù)存在主子表時,嵌套的Repeater就可以幫大忙了。外面的綁定主表數(shù)據(jù),里面的綁定子表數(shù)據(jù)。這樣顯示出來的情況是主表記錄顯示一行接著顯示一行子表記錄。以此類推。這是不是給人一種耳目一新的感覺呢?如果是多層嵌套也沒關(guān)系,就是不斷獲得子Repeater對象即可。 PS:要主表記錄行下面顯示對應(yīng)主表的子表記錄,就看你給子Repeater綁定怎樣的數(shù)據(jù)源了。這里就是看你如何傳值了,給怎樣的數(shù)據(jù)源了。
2.Repeater里的按鈕單擊事件 參考代碼: 前臺: <asp:Button ID="delete" runat="server" Text="刪除" OnCommand="deletequestionOption_Click"></asp:Button>
后臺: if ((sender as System.Web.UI.WebControls.Button).Text == "刪除") //如何獲取控件對象呢,彩色的代碼就是獲取的方法 小結(jié): 你想過用Repeater來編輯顯示出來的數(shù)據(jù)嗎?比如刪除或修改數(shù)據(jù)。在Repeater里面放入Button。通過OnCommand屬性來產(chǎn)生一個事件,以便達(dá)到編輯數(shù)據(jù)的效果。
3.獲取子Repeater里的控件 參考代碼: 前臺: <asp:Repeater ID="questionTable" runat="server" //先獲取子Repeater {
4.Repeater里單選按鈕互斥問題 有時需要往Repeater中加入單選按鈕,當(dāng)我們加入<asp:radioButton/>這個控件后,發(fā)現(xiàn)無論自己如何設(shè)置GroupName屬性也無法使其互斥(每個單選都能被選中)。為什么會這樣呢? 這是因?yàn)榉湃隦epeater中的單選按鈕控件自動生成的RadioButton的GroupName不是唯一的,是依據(jù)“模板行ID+radiobutton的ID”(如:Repeater1_ctl02_CustomerRadio1,Repeater1_ctl03_CustomerRadio1) 了解原因后,所以解決方法有兩種,一種是重寫<asp:radioButton/>控件(重寫,估計你會崩潰的)。令一種就是用<input type="radio"/>來解決。 我選擇最簡單的第二種,真的很簡單。網(wǎng)上有一種方法也用到了<input type="radio"/>但是都用到了大量的JavaScript。很頭疼的說,都挺復(fù)雜的。 我們知道<input type="radio"/>分組的屬性是name。所以當(dāng)你設(shè)置name屬性后,就會發(fā)現(xiàn)所有行的單選按鈕都互斥(因?yàn)樗械膎ame都相同),正好與<asp:radioButton/>走了另一個方向的極端。所以必須綜合思考下。 我們可以通過獲取Repeater顯示行的行號來表示name,那樣就可以讓每行的單選按鈕互斥了。所以獲取行號的方法如下: <input type="radio" id="Radio" name="<%#Container..ItemIndex%>"/> Container.ItemIndex是獲取Repeater的行號 如果你運(yùn)用了嵌套Repeater,而且你的單選按鈕在子Repeater。那么你的radio必須獲取父Repeater行號才行。方法如下: <input type="radio" id="Radio" name="<%#((RepeaterItem)Container.Parent.Parent).ItemIndex%>"/>
5.Repeater中記錄單選按鈕選擇狀態(tài)并顯示 為什么要記錄,當(dāng)你的Repeater具有分頁功能的時候。你每次點(diǎn)擊其它的頁面時,會將原來已被選中的radio全部還原成為選中狀態(tài)。所以記錄下每頁的radio選擇情況就很有必要了。這里用JavaScript來解決。 代碼如下:
function AddRemoveValues(oChk) { } <input type="radio" id="option" onclick="AddRemoveValues(this)" value=''<%# Eval("FID") %>'' name="<%#((RepeaterItem)Container.Parent.Parent).ItemIndex%>"/> 延伸: 雖然每次點(diǎn)擊的radio都被記錄了下來。那怎么樣利用這些記錄的值來顯示出來呢?下面我們就談?wù)撨@個問題。 同樣通過激發(fā)某個事件來激發(fā)一個腳本。腳本代碼如下: function SelectStatus() { for (var i = 0; i < radios.length; i++) { PS: 值得注意的是,通過“HdnSelectedValues.ClientID”來獲取客戶端ID。比如我這里查看到源代碼中的客戶端是ID的"ctl00_cphPostback_HdnSelectedValues",這就是為什么直接獲取“HdnSelectedValues”是沒用的 該文章在 2017/11/16 23:09:24 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |