0

如何为 CheckBoxList 上的每个项目添加一个事件,例如我想添加一个单击事件以检查已检查的项目。

提前致谢。

4

3 回答 3

1

CheckBoxList 中的每个项目都是类型System.Web.UI.WebControls.ListItem并且没有定义事件。

于 2012-08-20T17:09:57.400 回答
0

好的。所以我找到了这个问题/答案,但它并没有帮助我。虽然提供的答案是正确的,但有一种简单的方法可以使用 Repeater 控件构建类似于 CheckBoxList 的控件。

事实证明,您可以将Repeater 与带有CheckBox 的ItemTemplate 一起使用。我在这里有一个完整的解释:http ://www.rhyous.com/2014/10/17/aspx-checkboxlist-alternative-that-allows-for-the-oncheckedchanged-event/

我还在这个答案中复制了所需的数据:

默认.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>

默认.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
            }
        }
    }
}

复选框视图模型

namespace CheckBoxListExample.Models
{
    public class CheckBoxViewModel
    {
        public string Name { get; set; }
        public bool IsChecked { get; set; }
    }
}
于 2014-10-17T21:02:20.993 回答
0

CheckBoxList 有点棘手。不要认为有一种直接的方法可以为每个项目添加点击事件,因为 ListItem 类没有任何事件。

您可以AutoPostBack="true"在 CheckBoxList 上设置并检查页面加载时选择了哪些项目,但您不会很容易知道最后点击的是哪个项目。

其他解决方案是摆脱 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 来处理项目上的点击事件。

于 2012-08-20T17:13:06.060 回答