如何为每个项目添加一个事件在CheckBoxList上,例如我想要添加一键事件以检查已检查的项目。
提前感谢。
答案 0 :(得分:1)
CheckBoxList中的每个项目都是System.Web.UI.WebControls.ListItem
类型,并且没有事件已定义。
答案 1 :(得分:0)
这对CheckBoxList来说有点棘手。不要认为有一种直接的方法可以为每个项添加一个click事件,因为ListItem类没有任何事件。
您可以在CheckBoxList上设置AutoPostBack="true"
并检查页面加载选择了哪些项目,但您不会轻易知道哪一项是最后一次点击的。
其他解决方案是删除CheckBoxList并仅创建CheckBoxes并将click事件设置为相同的事件方法。在那里你可以检查发件人。
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来处理项目上的点击事件。
答案 2 :(得分:0)
行。所以我发现了这个问题/答案并没有帮助我。虽然提供的答案是正确的,但有一种简单的方法可以使用Repeater控件构建类似CheckBoxList的控件。
原来你可以使用带有CheckBox的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; }
}
}