如何爲每個項目添加一個事件在CheckBoxList上,我想Wanto添加一個Click事件來檢查哪個項目已被選中。如何將一個事件添加到CheckboxList上的每個項目Asp.net
在此先感謝。
如何爲每個項目添加一個事件在CheckBoxList上,我想Wanto添加一個Click事件來檢查哪個項目已被選中。如何將一個事件添加到CheckboxList上的每個項目Asp.net
在此先感謝。
CheckBoxList中的每個項目類型爲System.Web.UI.WebControls.ListItem
並且已有未定義任何事件。
這對CheckBoxList有點棘手。不要認爲有一種直接的方法可以爲每個項目添加點擊事件,因爲ListItem類沒有任何事件。
您可以在CheckBoxList上設置AutoPostBack="true"
並檢查頁面加載哪些項目被選中,但是您不知道哪一個是最後一次點擊的項目。
其他解決方案是擺脫CheckBoxList並創建CheckBoxes並將其設置爲相同的事件方法。在那裏你可以檢查發件人。
ASPX:
<asp:CheckBox ID="CheckBox1" Text="A" OnCheckedChanged="CheckBox_Clicked" AutoPostBack="true" runat="server" />
<asp:CheckBox ID="CheckBox2" Text="B" OnCheckedChanged="CheckBox_Clicked" AutoPostBack="true" runat="server" />
<asp:CheckBox ID="CheckBox3" Text="C" OnCheckedChanged="CheckBox_Clicked" AutoPostBack="true" runat="server" />
後面的代碼:
void CheckBox_CheckedChanged(object sender, EventArgs e)
{
Console.WriteLine(((CheckBox)sender).Text);
}
或者你可以作出這樣的處理上項目單擊事件自己的自定義的CheckBoxList。
好的。所以我找到了這個問題/答案,它並沒有幫助我。雖然提供的答案是正確的,但有一個簡單的方法可以用Repeater控件構建類似CheckBoxList的控件。
原來,你可以在複選框中使用帶有ItemTemplate的Repeater。 我這裏有一個完整的解釋:http://www.rhyous.com/2014/10/17/aspx-checkboxlist-alternative-that-allows-for-the-oncheckedchanged-event/
這裏我也複製在這個答案所需要的數據:
Default.aspx的
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CheckBoxListExample._Default" %>
<%@ Import Namespace="CheckBoxListExample" %>
<%@ Import Namespace="CheckBoxListExample.Models" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:CheckBox ID="cb1" runat="server" AutoPostBack="true" OnCheckedChanged="RepeaterCheckBoxChanged"
Text="<%# ((CheckBoxViewModel)Container.DataItem).Name %>"
Checked="<%# ((CheckBoxViewModel)Container.DataItem).IsChecked %>" />
</ItemTemplate>
</asp:Repeater>
</div>
</asp:Content>
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using CheckBoxListExample.Models;
namespace CheckBoxListExample
{
public partial class _Default : Page
{
private List<CheckBoxViewModel> _ViewModels;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var _ViewModels = new List<CheckBoxViewModel>
{
new CheckBoxViewModel {Name = "Test1", IsChecked = true},
new CheckBoxViewModel {Name = "Test2"},
new CheckBoxViewModel {Name = "Test3"}
};
Repeater1.DataSource = _ViewModels;
Repeater1.DataBind();
}
}
protected void RepeaterCheckBoxChanged(object sender, EventArgs e)
{
var cb = sender as CheckBox;
if (cb == null) return;
if (cb.Checked)
{
// Insert
}
else
{
// Delete
}
}
}
}
CheckBoxViewModel
namespace CheckBoxListExample.Models
{
public class CheckBoxViewModel
{
public string Name { get; set; }
public bool IsChecked { get; set; }
}
}
所以沒有辦法知道任何項目被點擊或選中時? – BlaShadow 2012-08-20 17:14:04
@BlaShadow即使有可能,每次檢查/取消選中都需要往返服務器,這可能不太好。 – 2012-08-20 17:18:54