2012-08-20 35 views

回答

1

CheckBoxList中的每個項目類型爲System.Web.UI.WebControls.ListItem並且已有未定義任何事件

+0

所以沒有辦法知道任何項目被點擊或選中時? – BlaShadow 2012-08-20 17:14:04

+2

@BlaShadow即使有可能,每次檢查/取消選中都需要往返服務器,這可能不太好。 – 2012-08-20 17:18:54

0

這對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。

0

好的。所以我找到了這個問題/答案,它並沒有幫助我。雖然提供的答案是正確的,但有一個簡單的方法可以用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; } 
    } 
} 
相關問題