CheckBoxListの各アイテムに1つのイベントを追加するにはどうすればよいですか。たとえば、ワンクリックイベントを追加して、チェックされているアイテムを確認します。
前もって感謝します。
CheckBoxListの各アイテムに1つのイベントを追加するにはどうすればよいですか。たとえば、ワンクリックイベントを追加して、チェックされているアイテムを確認します。
前もって感謝します。
CheckBoxListの各項目はタイプSystem.Web.UI.WebControls.ListItem
であり、イベントは定義されていません。
これは、CheckBoxListでは少し注意が必要です。ListItemクラスにはイベントがないため、各アイテムにクリックイベントを追加する簡単な方法があるとは思わないでください。
CheckBoxListを設定AutoPostBack="true"
して、どのアイテムが選択されているかをページの読み込みで確認することはできますが、最後にクリックされたアイテムがどれであるかは簡単にはわかりません。
他の解決策は、CheckBoxListを削除し、CheckBoxだけを作成して、それらのclick-eventを同じevent-methodに設定することです。そして、そこで送信者を確認できます。
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のようなコントロールを構築する簡単な方法があります。
CheckBoxを備えたItemTemplateでリピーターを使用できることがわかりました。ここに完全な説明があります: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; }
}
}