我有一些工作代碼,但我不認爲這是實現我要做的最好的方法。CheckBoxList中的「Select All」
我有一個CheckBoxList有5個項目 - 4個單獨項目和1個「全選」項目。選擇全選後,我希望爲用戶檢查其他4。當Select All被取消選中時,我希望其他4對於用戶不被選中。
我在StackOverflow和Google上發現的一堆事情只是建議通過CheckBoxList.Items循環,但這不適用於我的情況。例如,說一個用戶不檢查項目#3 - 這會觸發OnSelectedIndexChanged事件,此時我將開始循環通過項目。我會發現「全選」項沒有被選中,所以我會取消選擇所有項目。因此,用戶僅檢查項目#3,以便立即取消它們的選擇。
下面是我的工作代碼,但它使用了一些奇怪的功能,我無法想象這是實現我所尋找的最佳方式。
protected void StatusCheckBoxListChanged(object sender, System.EventArgs e)
{
//Crazy code I found online to determine which item triggered the event
CheckBoxList list = (CheckBoxList)sender;
string[] control = Request.Form.Get("__EVENTTARGET").Split('$');
int index = control.Length - 1;
ListItem li = (ListItem)list.Items[Int32.Parse(control[index])];
if (li.ToString().Equals("Select All")) //If it was the "Select All" Item which triggered the event
{
//If it was checked, check off everything. If it was unchecked, uncheck everything.
for(int i = 0; i < StatusCheckBoxList.Items.Count; i++)
{
StatusCheckBoxList.Items[i].Selected = StatusCheckBoxList.Items.FindByValue("Select All").Selected;
}
}
}
你可以提供'CheckBoxList'的標記嗎? – Grundy
當然,雖然它是相當標準的。 ''' –
Jake
似乎更好的使用另一個CheckBox代替CheckBoxList中的項目 – Grundy