真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【轉(zhuǎn)載】Repeater控件里的大智慧-創(chuàng)新互聯(lián)

目 錄【轉(zhuǎn)載】Repeater控件里的
大智慧

1.Repeater的嵌套使用

創(chuàng)新互聯(lián)公司是專業(yè)的丘北網(wǎng)站建設(shè)公司,丘北接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行丘北網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

2.Repeater里的按鈕單擊事件

3.獲取子Repeater里的控件

4.Repeater里單選按鈕互斥問(wèn)題

5.Repeater中記錄單選按鈕選擇狀態(tài)并顯示

1.Repeater的嵌套使用:

參考代碼:

前臺(tái):

onitemdatabound="questionTable_ItemDataBound">

<%#DataBinder.Eval (Container.DataItem ,"FID") %>


<%#DataBinder.Eval (Container.DataItem ,"OPTIONNAME") %>




如果你仔細(xì)看了下結(jié)構(gòu),你是否會(huì)思考一個(gè)問(wèn)題。如何對(duì)里面嵌套的Repeater進(jìn)行數(shù)據(jù)綁定呢?

接下來(lái)看后臺(tái)代碼。

后臺(tái):

//用Repeater的ItemDataBound事件

protected void questionTable_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
System.Web.UI.WebControls.Repeater questionOption = (System.Web.UI.WebControls.Repeater)e.Item.FindControl("questionOption"); //獲取嵌套中的Repeater 這是關(guān)鍵

//接下來(lái)就可以把你的數(shù)據(jù)源給子Repeater了
questionOption.DataSource = "......" ; //給出要綁定的數(shù)據(jù)
questionOption.DataBind();
}
}

小結(jié):

什么時(shí)候用嵌套呢?當(dāng)要綁定的數(shù)據(jù)存在主子表時(shí),嵌套的Repeater就可以幫大忙了。外面的綁定主表數(shù)據(jù),里面的綁定子表數(shù)據(jù)。這樣顯示出來(lái)的情況是主表記錄顯示一行接著顯示一行子表記錄。以此類推。這是不是給人一種耳目一新的感覺(jué)呢?如果是多層嵌套也沒(méi)關(guān)系,就是不斷獲得子Repeater對(duì)象即可。

PS:要主表記錄行下面顯示對(duì)應(yīng)主表的子表記錄,就看你給子Repeater綁定怎樣的數(shù)據(jù)源了。這里就是看你如何傳值了,給怎樣的數(shù)據(jù)源了。

2.Repeater里的按鈕單擊事件

參考代碼:

前臺(tái):

后臺(tái):
protected void deletequestionOption_Click(object sender,CommandEventArgs e)
{

if ((sender as System.Web.UI.WebControls.Button).Text == "刪除")
{

//如何獲取控件對(duì)象呢,彩色的代碼就是獲取的方法
}
}

小結(jié):

你想過(guò)用Repeater來(lái)編輯顯示出來(lái)的數(shù)據(jù)嗎?比如刪除或修改數(shù)據(jù)。在Repeater里面放入Button。通過(guò)OnCommand屬性來(lái)產(chǎn)生一個(gè)事件,以便達(dá)到編輯數(shù)據(jù)的效果。

3.獲取子Repeater里的控件

參考代碼:

前臺(tái):

onitemdatabound="questionTable_ItemDataBound">









后臺(tái):
//ItemCommand事件是Repeater中生成事件時(shí)激發(fā)(也就是Repeater里面的事件都會(huì)觸發(fā)此事件)
protected void questionTable_ItemCommand(object source, RepeaterCommandEventArgs e)
{
System.Web.UI.WebControls.TextBox Toption = null;
string toption = null;

System.Web.UI.WebControls.Repeater rptchild = (System.Web.UI.WebControls.Repeater)e.Item.FindControl("questionOption");

//先獲取子Repeater
for (int j = 0; j < rptchild.Items.Count; j++) //通過(guò)循環(huán)遍歷來(lái)獲取

{
//找到子級(jí)Repeater中的控件
Toption = (System.Web.UI.WebControls.TextBox)rptchild.Items[j].FindControl("Toption");
toption = Toption.Text;
}
}

4.Repeater里單選按鈕互斥問(wèn)題

有時(shí)需要往Repeater中加入單選按鈕,當(dāng)我們加入這個(gè)控件后,發(fā)現(xiàn)無(wú)論自己如何設(shè)置GroupName屬性也無(wú)法使其互斥(每個(gè)單選都能被選中)。為什么會(huì)這樣呢?

這是因?yàn)榉湃隦epeater中的單選按鈕控件自動(dòng)生成的RadioButton的 GroupName不是唯一的,是依據(jù)“模板行ID+radiobutton的ID” (如:Repeater1_ctl02_CustomerRadio1,Repeater1_ctl03_CustomerRadio1)

了解原因后,所以解決方法有兩種,一種是重寫(xiě)控件(重寫(xiě),估計(jì)你會(huì)崩潰的)。令一種就是用來(lái)解決。

我選擇最簡(jiǎn)單的第二種,真的很簡(jiǎn)單。網(wǎng)上有一種方法也用到了但是都用到了大量的JavaScript。很頭疼的說(shuō),都挺復(fù)雜的。

我們知道分組的屬性是name。所以當(dāng)你設(shè)置name屬性后,就會(huì)發(fā)現(xiàn)所有行的單選按鈕都互斥(因?yàn)樗械膎ame都相同),正好與走了另一個(gè)方向的極端。所以必須綜合思考下。

我們可以通過(guò)獲取Repeater顯示行的行號(hào)來(lái)表示name,那樣就可以讓每行的單選按鈕互斥了。所以獲取行號(hào)的方法如下:

Container.ItemIndex是獲取Repeater的行號(hào)

如果你運(yùn)用了嵌套R(shí)epeater,而且你的單選按鈕在子Repeater。那么你的radio必須獲取父Repeater行號(hào)才行。方法如下:

5.Repeater中記錄單選按鈕選擇狀態(tài)并顯示

為什么要記錄,當(dāng)你的Repeater具有分頁(yè)功能的時(shí)候。你每次點(diǎn)擊其它的頁(yè)面時(shí),會(huì)將原來(lái)已被選中的radio全部還原成為選中狀態(tài)。所以記錄下每頁(yè)的radio選擇情況就很有必要了。這里用JavaScript來(lái)解決。

代碼如下:

function AddRemoveValues(oChk) {
var HdnSelectedValues = document.getElementById("ctl00_cphPostback_HdnSelectedValues"); //這里隱藏控件的id是通過(guò)查看源碼獲得的 原因可能是因?yàn)槊總€(gè)母版也里面包含了其它自帶的隱藏控件
var names = document.getElementsByName(oChk.name); //這里是獲取一行中的所有單選按鈕 為下面來(lái)分別判斷那個(gè)是被選中的
for (var i = 0; i < names.length; i++)
if (names[i].checked) {
if (HdnSelectedValues.value.indexOf(oChk.value) < 0) { //如果隱藏控件里面有這個(gè)值了,就不進(jìn)行添加(防止用戶多次點(diǎn)擊已選中的單選按鈕)
HdnSelectedValues.value += "," + oChk.value;
}
}
else {
HdnSelectedValues.value = HdnSelectedValues.value.replace("," + names[i].value, ""); //沒(méi)有被選擇,則替換掉原來(lái)進(jìn)去的值
}

}


延伸:

雖然每次點(diǎn)擊的radio都被記錄了下來(lái)。那怎么樣利用這些記錄的值來(lái)顯示出來(lái)呢?下面我們就談?wù)撨@個(gè)問(wèn)題。

同樣通過(guò)激發(fā)某個(gè)事件來(lái)激發(fā)一個(gè)腳本。腳本代碼如下:

function SelectStatus() {
var HdnSelectedValues = document.getElementById("<%=HdnSelectedValues.ClientID%>");
var radios = document.getElementsByTagName("input");//獲取當(dāng)前頁(yè)面所有的radio

for (var i = 0; i < radios.length; i++) {
if (radios[i].type == "radio") {
if (HdnSelectedValues.value.indexOf(radios[i].value) >= 0) { //如果該單選按鈕的值在隱藏控件里則單選為被選狀態(tài)
radios[i].checked = true;
}
}
}
}

PS: 值得注意的是,通過(guò)“HdnSelectedValues.ClientID”來(lái)獲取客戶端ID。比如我這里查看到源代碼中的客戶端是ID的"ctl00_cphPostback_HdnSelectedValues",這就是為什么直接獲取“HdnSelectedValues”是沒(méi)用的

      不登高山,怎知天高;不臨深溪,焉知地厚!站在堅(jiān)實(shí)的土地上,做著生命中最真實(shí)的事情;像一棵挺拔的大樹(shù),認(rèn)可自己的命運(yùn)并敢于迎接屬于這一方天空的風(fēng)風(fēng)雨雨。
網(wǎng)頁(yè)標(biāo)題:【轉(zhuǎn)載】Repeater控件里的大智慧-創(chuàng)新互聯(lián)
本文來(lái)源:http://weahome.cn/article/hpeps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部