一、任务描述
添加新网页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));
}
}
}
}
}