ASP.net开发标准控件之CheckBoxAndCheckBoxList

一、任务描述

添加新网页CheckBoxAndCheckBoxList.aspx,完成下图所示的功能:
这里写图片描述
(1) 当“全部”复选框被选中的话,三个食物前面的复选框也都被选中。
(2) 当三个食物前面的复选框都被选中的话,“全部”复选框也自动被选中。
(3) 当三个食物前面的复选框没有全部被选中的话,“全部”复选框自动取消被选中。
(4) 单击“提交”按钮后,会自动按照选中状态累加统计出各个食物被选中的次数。
需要用到控件:1个CheckBox;1个CheckBoxList;1个Button。

二、操作

2.1.完成基本界面

1). 使用Visual Studio.Net创建一个空白解决方案。新建项目的时候,选择“其他项目类型”中的“Visual Studio 解决方案”,并选择“空白解决方案”。解决方案名为“S16”
2). 为解决方案添加一个Web应用程序项目。项目名:“Web”
3).添加新网页CheckBoxAndCheckBoxList.aspx,并将控件:1个CheckBox;1个CheckBoxList;1个Button拖到页面中,并分别修改属性值
这里写图片描述
CheckBoxList的Item:
这里写图片描述

效果图如下:
这里写图片描述

2.2 功能一

1功能描述:.当“全部”复选框被选中的话,三个食物前面的复选框也都被选中。
2 功能分析:
首先分析这是谁的事件,很明显是属于“全部”复选框的事件,即其选中状态改变时发生
事件内容为:
若“全部”复选框选中,则复选框列表也是选中的;
若“全部”复选框未选中,则复选框列表也是未选中的;总之即“全部”复选框和复选框列表的选中状态是一致的。
3操作步骤:
1)打开CheckBox的属性(F4),点击事件
这里写图片描述
2)双击CheckedChange事件,创建复选框选中改变事件
这里写图片描述
3)写事件内容:
这里写图片描述
4)运行效果:
运行项目:点击调试–》开始执行不调试或者直接按Ctrl+F5
这里写图片描述
这里写图片描述

2.3 功能二

1.功能描述:
当三个食物前面的复选框都被选中的话,“全部”复选框也自动被选中。
当三个食物前面的复选框没有全部被选中的话,“全部”复选框自动取消被选中。
2.功能分析:
首先事件是属于复选框列表的,即复选框列表的选中状态改变时发生的
事件内容:可以从复选框列表的数量入手;
若复选框列表的选中数和总项目数相等,则“全选”复选框选中状态
若复选框列表的选中数和总项目数不相等,则“全选”复选框非选中状态
3. 操作步骤
1)进入CheckBoxlist属性界面(F4),选择事件,双击SelectedIndexChanged,创建了复选框选中改变事件
这里写图片描述
2)写事件内容:
这里写图片描述
3)运行效果:
这里写图片描述这里写图片描述

2.4 功能三

1.功能描述:单击“提交”按钮后,会自动按照选中状态累加统计出各个食物被选中的次数。
2.功能分析:
此事件显然属于按钮的点击事件
事件内容:
因为复选框列表是个集合,应当循环每个列表项进行判断:
首先获取原有的选中次数,其次判断此次有无选中,选中则+1
3.操作步骤:
1)打开按钮button的属性界面,选择事件图标,双击事件Click,创建了按钮点击事件
这里写图片描述
3)写事件内容:
这里写图片描述
4)运行效果:
这里写图片描述

三、总结:

实现功能时一定要分析清楚,这属于事件吗?哪个控件的事件?什么事件?然后理清楚逻辑,分析事件内容应该是怎样的,最后能用文字叙述出其步骤,那么接下来要做的就是将步骤翻译成C#代码语言即可。
对于CheckBox和CheckBoxList控件,需要特别说明的是记得将其AutoPostBack属性设置为true,即单击时,会回发到服务器,这样才会响应到事件。

源码:

前端:CheckBoxAndCheckBoxList.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CheckBoxAndCheckBoxList.aspx.cs" Inherits="Web.CheckBoxAndCheckBoxList" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

    <asp:CheckBox ID="chkbxAll" runat="server" AutoPostBack="True" 
        oncheckedchanged="chkbxAll_CheckedChanged" />

    <asp:Label ID="lblAll" runat="server" Text="全选"></asp:Label>
    <asp:CheckBoxList ID="chkbxlst" runat="server" AutoPostBack="True" 
        onselectedindexchanged="chkbxlst_SelectedIndexChanged">
        <asp:ListItem Value="1.0">香蕉(已选择 0 次)</asp:ListItem>
        <asp:ListItem Value="2.0">苹果(已选择 0 次)</asp:ListItem>
        <asp:ListItem Value="3.0">梨子(已选择 0 次)</asp:ListItem>
    </asp:CheckBoxList>

    <asp:Button ID="btnSubmit" runat="server" onclick="btnSubmit_Click1" 
        Text="Button" />

    </form>
</body>
</html>

后端:CheckBoxAndCheckBoxList.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Web
{
    public partial class CheckBoxAndCheckBoxList : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void chkbxAll_CheckedChanged(object sender, EventArgs e)
        {
            foreach (ListItem item in this.chkbxlst.Items)
            {
                item.Selected = chkbxAll.Checked;
            }
        }
        protected void chkbxlst_SelectedIndexChanged(object sender, EventArgs e)
        {
            //获取CheckBoxList的选中项目数
            int nCount =
               this.chkbxlst.Items.Cast<ListItem>().Count(p => p.Selected);
            //判断CheckBoxList的所有项目是否都选中(计数对比)
            this.chkbxAll.Checked =
                (nCount == this.chkbxlst.Items.Count);    
        }

        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            foreach(ListItem aItem in this.chkbxlst.Items)
            {
            //1.求出上次被选中的次数。     
                int iCount = Convert.ToInt32(aItem.Value.Substring(aItem.Value.IndexOf('.') + 1));
            //2. 对被选中的次数做累加,并按照“X.X”格式回写给列表项的“Value”属性。
                if (aItem.Selected)
                {
                    //修改Value值
                    aItem.Value = aItem.Value.Replace(string.Format(".{0}", iCount), string.Format(".{0}", iCount + 1));
                    //修改Text值
                    aItem.Text = aItem.Text.Replace(string.Format("(已选择 {0} 次)", iCount), string.Format("(已选择 {0} 次)", iCount + 1));
                }
            }


        }


    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值