2009-10-28 95 views
0

如何獲取由checkboxlist生成的所有複選框的id,並將datatable作爲其數據源?Checkboxlist +獲取所有複選框的ID

我想我必須使用複選框列表中的「OnDataBinding」事件,但我不明白這對我有何幫助。

我使用C#

我不認爲獲得通過的複選框列表中產生的所有複選框的ID是可能的,所以我覺得要も工具的方法是做正確的事。

任何想法?

感謝

回答

1

理想情況下,您只需要將點擊事件處理程序附加到domReady事件中的所有複選框列表中,這將與MooTools一起創建更簡單的功能。然而,如果你願意,你可以保持你的代碼不變,只是讓你的2個函數更簡單一些。

function ToggleSelection(ctrl, sender) { 
    var checkboxes = $(ctrl).getElements('input[type=checkbox]'); 
    checkboxes.set('checked', sender.checked); 
} 

function ToggleSelectAll(ctrl, sender) { 
    var fAllChecked = ($(sender).getElements('input:checked').length == $(sender).getElements('input[type=checkbox]').length) 
    $(ctrl).set('checked', fAllChecked); 
} 

您可以一次設置整個ELements數組的屬性,不需要遍歷它們。在第二個函數中,我將檢查檢查的元素的數量與複選框的總數,如果它們匹配,則表示它們全部被檢查。

+0

這絕對好得多。謝謝 – iJK 2009-10-30 17:27:50

0

您是否使用VB或者C#..請標記相應

您可以列表或字符串稱爲strchklist

VB.NET

For Each li In CheckBoxList1.Items 
     If li.Selected Then 
      strchklist += li.Id 
     End If 
    Next 

C#

foreach (ListItem li in CheckBoxList1.Items){ 
     If li.Selected 
      strchklist += li.Id ;} 
+0

對不起,忘了標記語言 – iJK 2009-10-28 22:11:38

+0

這將無法正常工作,因爲ListItem沒有「ID」屬性。我也試過li.Attributes [「id」]並返回null。 – iJK 2009-10-28 22:18:37

0

<asp:ListItem>不是一個真正的控件本身,因此沒有ID。如果您想在客戶端腳本中訪問它,請添加您可以引用的新屬性。 (是的,在OnDataBinding期間)請記住,這些不會保留在ViewState中!

你究竟想完成什麼?可能會有所幫助。

+0

我擁有的是一個複選框列表和一個單獨的複選框(全選複選框)。因此,當選中全選複選框時,我需要檢查複選框列表生成的所有複選框,反之亦然。所以,當複選框列表生成的複選框未被選中時,我需要取消選中全選複選框(如果選中)。 所以我想我需要知道複選框生成的複選框列表,所以這種方式我可以添加腳本來檢查或取消選中全選複選框... 我希望我很清楚 – iJK 2009-10-28 23:55:05

+0

嗯,這是一個使用jQuery的好地方,如果你想做它的客戶端。另外,我會爲您發佈替代答案。 – Bryan 2009-10-29 05:59:19

0

完全不同的答案......

的CheckBoxList的是一個有點古怪的傢伙......不同於其他控件,它並沒有真正有一個邏輯映射到一個明顯的HTML結構。它實際上使用派生ID呈現多個複選框。這些ID似乎產生爲CheckBoxList.ClientID + 「_」 + 項目索引

您可以通過查看頁面源來驗證這一點。在內部,似乎單個複選框控件的ID只是其索引,然後使用CheckBoxList作爲它的NamingContainer呈現它。您可以使用Reflector查看CheckBoxList控件如何呈現輸出。

仍然是jQuery的好去處。現在你更容易知道這些ID。

+0

是的,使用JQuery將會非常容易。然而,我正在爲一個CMS解決方案(kentico)構建一個web部件,它與moo工具一起提供,並與JQuery衝突。 – iJK 2009-10-29 13:35:48

+0

嗨布萊恩, 我聽到你說了什麼,我不知道爲什麼我沒有想到它寫在「moo工具」。我認爲它是因爲我記得它試圖確定爲什麼jquery不工作是多麼令人沮喪。 所以我得到它的工作,但我不需要知道複選框列表生成的複選框的所有ID。 – iJK 2009-10-29 14:19:31

0

今天早晨我和這樣的思想(cblUSEquities是一個複選框列表)

cblUSEquities.Attributes.Add("onclick", "javascript:alert('Clicked');"); 

此選項將在複選框列表生成警報表中醒了過來。有一點需要注意的是,警報會顯示兩次如果我單擊複選框的文本,並單擊複選框一次。我認爲這個解決方案適用於我。

順便說一句,我從來沒有想過上面的代碼會工作...

P.S回答我自己的問題,因爲我想寫一些代碼,我不能使用評論框。

本着StackOverFlow的精神,我到達了一種適用於我的場景的東西,但問題的描述是不同的?我該怎麼辦?編輯問題並將其標記爲答案?

0

我能夠通過使用mootools來做到這一點,這是代碼。

function ToggleSelection(ctrl, sender) 
{ 
    var cblCtrl = $(ctrl); 
    var Allcbs = cblCtrl.getElements('input'); 

    for(var i=0; i<Allcbs.length; i++) 
     Allcbs[i].checked = sender.checked; 
} 

function ToggleSelectAll(ctrl, sender) 
{ 
    var AllTrueCount = 0; 
    var cblCtrl = $(ctrl); 
    var Allcbs = sender.getElements('input'); 

    for(var i=0; i<Allcbs.length; i++) 
     if(Allcbs[i].checked) 
      AllTrueCount++; 

    if(AllTrueCount == Allcbs.length) 
     cblCtrl.checked = true; 
    else 
     cblCtrl.checked = false; 
} 

C#代碼事實證明我並不需要知道複選框列表中產生的所有複選框的id的這調用JavaScript函數

//Binding event to the checkbox list 
cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID)); 

//binding event to the select all checkbox 
chkAllUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelection('{0}', this);", cblUSEquities.ClientID)); 

。我可以通過這條線

cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID)); 

這將onclick事件添加到複選框列表生成表的onclick的javascript添加到這些複選框。

相關問題