基于.NET的Web程序设计知识点总结
1.网站中的Global.asax文件(如果有的话)必须放在应用程序的根目录下(T)2.利用DetailsView控件添加记录特别方便,因为不需要另外增加输入框(T)3.ADO.NET只是ADO的简单升级(F)
4.数据集(DataSet)能够在断开与数据源连接的情况下工作(T)5.ASP.NET采用的是代码分离模式(T)
6.离开了网站,aspx页面可以单独运行(F)
7.离开了IIS服务器,.htm页面可以单独运行(T)8.在DetailsView中不能显示符合条件的多条记录(F)
9.Web服务器控件的几个按钮都可以起到向服务器提交数据的作用(T)10.XML是一种编程语言(F)
1.服务器控件的AutoPostBack属性的含义是选择服务器控件时,是否自动回送。
。2.要求在某文本框中输入密码,一般要将该TextBox控件的TextMode属性设置为
Password。
3.Page对象的IsPostBack属性的含义是指示该页是否正为响应客户端回发而加载,或者是否正被首次加载和访问。如果是响应客户端回发而加载,其值为True,否则为False。
4.Response对象在使用时是通过使用Page对象的Response属性而达到的。5.ASP.NET中的页面跳转可以通过Response对象的Redirect方法实现。
6.ASP.NET中存储页面间共享的变量可以通过Session对象或Application对象实现。7.存储过程的英文原词为StoredProcedure。
8.ADO.NET包含的5大对象为Connection,Command,DataReader,
DataAdapter,DataSet。
9.使用SqlConnection对象连接到本地的数据库服务器上的Northwind数据库时,如果使用集成
Windows的身份验证模式,则连接字符串的写法为:
SqlConnection
conn=new
SqlConnection("Data
Source=.;Initial
Catalog=Northwind;Integrated
Security=True");。
10.下面是设置和取出Session对象的代码。
设置Session的代码是:
Session[“greeting”]=”hellowang!”;
取出该Session的对象的语句如下:
Stringgreeting=Session["greeting"].ToString();
11.App_Data目录用来放置()
A.共享的数据库文件B.共享文件C.被保护的文件D.代码文件12.文件系统网站非常适合学习使用,因为()A.不需要安装IISB.网站允许放置在任意目录下C.能够进行单独测试D.A+B13.下面哪种后缀是静态网页文件()A.aspB.aspxC.htmD.jsp
14.在配置GridView控件的SqlDataSource数据源控件过程中,单击【高级】按钮的目的是()A.打开其他窗口B.输入新参数C.生成SQL编辑语句D.优化代码15.SiteMapDataSource能否用来访问()A.关系型数据B.层次性数据C.字符串数据D.数值型数据1.ASP.NET中服务器端控件的AutoPostBack属性的意义。(答案见P87)
2.ASP.NET中页面跳转的方式有几种,并简述各自的特点。(答案见P137~139)3.在网站中使用母版页的好处是什么,根据你的学习经历描述使用母版页的一般过程。(答案见P228)
扩展阅读:Net程序设计知识点
.Net程序设计
教材:
《VisualC#.NET实用教程》,清华大学出版社参考书:
课程学习的目的:
1学习并掌握.NET技术、C#的编程方法和面向对象思想;
2.学习并掌握ADO.NET技术及Windows数据库应用程序的开发;3.学习并掌握ASP.NET技术及Web应用程序的开发;4.学习并掌握网络编程的知识
前期课程基础:
数据结构、操作系统、计算机网络
授课学时与分配:总学时40学时
1.绪论(2学时)2.C#的编程基础(2学时)3.面向对象编程(6学时)4.Windows应用程序(4学时)5.ADO.NET技术(2学时)6.Windows数据库应用程序的开发(4学时)7.ASP.NET技术(4学时)8.Web应用程序的开发(3学时)9.网络编程基础(4学时)10.网络编程技术(6学时)11.总结考试(2学时)
授课时间、地点:
时间为每周一上午8:0012:10;地点为12教学楼A408,B304。第1讲.NET综述
1.1.NET介绍
1.2.NET核心成分简介
1.2.1公共语言运行库
1.2.2.NETFramework类库1.2.3中间语言和程序集1.2.4公共语言规范1.2.5通用类型系统1.3开发工具及C#语言
1.3.1开发工具介绍1.3.2C#语言简介
1.4基于.NET的应用程序
1.4.1SDK和IDE
1.4.2基于.NET的应用程序1.5C#程序设计初步
1.5.1在SDK上开发控制台程序
1.5.2在IDE上开发Windows应用程序1.5.3在IDE上开发Web应用程序
第2讲C#类型和语句成分
2.1关键字、标识符和注释
2.1.1关键字
2.1.2标识符及其命名2.1.3注释2.2C#类型基础
2.2.1类型分类
2.2.2C#语言的类型系统2.2.3变量
2.2.4常量和文字2.3值类型
2.3.1简单类型2.3.2枚举类型2.4数组类型
2.4.1一维数组2.4.2多维数组2.4.3交错数组2.4.4Array类简介2.4.5foreach语句2.5字符串常量
2.5.1创建字符串
2.5.2String字符串的比较2.6结构
2.6.1结构的声明
2.6.2结构的实例化及应用2.7运算符和表达式
2.7.1算术运算符2.7.2关系运算符2.7.3逻辑运算符2.7.4位运算符2.7.5赋值运算符2.7.6条件运算符
2.7.7运行符的优先级及结合性2.8数据类型转换
2.8.1隐式类型转换2.8.2显示转换
第3讲C#语句
3.1简单语句
3.1.1表达式语句3.1.2空语句3.1.3复合语句3.1.4声明语句3.2选择语句
3.2.1条件运算符3.2.2if语句3.2.3switch语句3.3循环语句
3.3.1while循环3.3.2do_while循环3.3.3for循环3.4跳转语句
3.4.1break语句3.4.2continue语句3.4.3goto语句3.4.4return语句3.5命名空间
3.5.1命名空间声明
3.5.2using命名空间指令3.5.3using别名指令
第4讲面向对象程序设计基础-类、对象、方法
4.1面向对象程序设计概述4.2类和对象
4.2.1类的声明4.2.2类的成员4.2.3对象的声明4.3构造函数
4.3.1默认构造函数4.3.2构造函数的重载4.4析构函数4.5方法
4.5.1方法的声明及调用4.5.2方法中的参数传递4.5.3实例方法和静态方法4.5.4方法重载4.6运算符重载4.7属性和索引器
4.7.1属性的声明和使用4.7.2索引器的声明和使用4.7.3属性和索引器的比较
第5讲面向对象程序设计-继承、多态
5.1类的继承
5.1.1基类与派生类
5.1.2成员的继承、添加和隐藏5.1.3base关键字5.2抽象类与封闭类
5.2.1抽象方法、属性、索引器5.2.2抽象类5.2.3密封类5.3多态
5.3.1虚成员5.3.2重写
5.3.3编译时多态和运行时多态
第6讲面向对象程序设计-接口、委托
1接口
.1接口的定义.2接口的实现2委托和事件
1委托2事件3异常处理
1异常类
2异常处理步骤3抛出异常4捕获处理异常
第7讲Windows应用程序
7.1Windows应用程序开发步骤
7.1.1创建窗体
7.1.2添加控件及控件布局7.1.3响应事件7.2Windows常用控件
7.2.1文本类控件7.2.2按钮类控件7.2.3对话框类控件
7.2.4列表框、视图类控件7.2.5滚动类控件
7.2.6工具栏和状态栏控件7.2.7定时器控件7.2.8菜单控件
7.3多文档界面(MDI)
7.3.1创建MDI父窗体7.3.2创建MDI子窗体
7.3.3确定活动的MDI子窗体7.3.4排列子窗体7.4实例解析
第7讲ADO.NET数据库访问技术
8.1ADO.NET概述8.2ADO.NET体系结构
8.2.1ADO.NET的总体结构8.2.2DataSet结构
8.2.3.NETFramwork数据提供程序
8.2.4ADO.NET开发数据库应用程序的一般步骤8.3数据库的连接
8.3.1Connection连接字符串8.3.2创建并使用连接对象8.4Command对象的使用
8.4.1创建Command对象8.4.2执行命令8.4.3参数化查询8.4.4执行存储过程8.5DataReader对象的使用
8.5.1创建DataReader对象8.5.2使用DataReader读取数据8.6DataSet和DataAdapter的使用
8.6.1DataSet对象管理数据8.6.2使用DataAdapter对象
第9讲Windows数据库应用程序开发
9.1数据绑定
9.1.1简单数据绑定9.1.2复杂数据绑定9.2数据源的类型9.2.1数组数据源9.2.2数据表数据源9.2.3数据集数据源
9.3Windows数据库应用实例
9.3.1数据库的创建及连接9.3.2主要界面及相关代码
第10讲ASP.NET技术
10.1ASP.NET简介
10.1.1ASP.NET的特点
10.1.2ASP.NET代码分离技术10.1.3Web窗体10.2ASP.NET控件
10.2.1HTML服务器控件10.2.2Web服务器控件10.2.3验证控件10.3ASP.NET内置对象
10.3.1Response对象10.3.2Request对象10.3.3Server对象10.3.4Session对象10.3.5Application对象
第11讲Web应用程序开发基础
11.1Web数据绑定技术11.2列表类数据绑定控件
11.2.1列表控件概述
11.2.2列表类控件数据绑定举例11.3GridView控件
11.3.1GridView控件概述
11.3.2常用属性、方法和事件11.3.3GridView中的字段类型11.3.4GridView数据显示11.3.5编辑和删除数据
11.3.6分页显示数据和数据排序11.4Global.asax文件11.5Web.config文件
11.5.1配置与调用数据库链接字符串11.5.2配置文件Web.config
第12讲网上选课系统的开发12.1需求分析12.2数据库设计
12.2.1数据库表12.2.2存储过程12.3系统设计12.4数据库连接
12.4.1Web.Config的配置12.4.2调用连接字符串12.5系统实现
12.5.1登录界面(Login/Login.aspx)
12.5.2选课界面(student/selectcourse.aspx)12.5.3提交界面(student/tijiao.aspx)
12.5.4学生管理界面(manager/StudentList)
12.5.5选课管理界面(manager/XuanKeList.aspx)
以上为考试范围
第13讲多线程和同步
13.1基本概念
13.1.1多线程概念
13.1.2C#中线程实现方法13.2Thread类
13.2.1Thread类介绍
13.2.2线程的状态和生命周期13.2.3线程的优先级13.3多线程编程
13.3.1编程步骤13.3.2编程实例13.4线程同步和互斥
13.4.1多个线程同时修改共享数据可能发生的错误13.4.2用Lock语句实现互斥13.4.3用Mutex类实现互斥13.4.4用Monitor类实现互斥13.5实例解析
第14讲网络协议与套接字编程
14.1TCP/IP网络协议
14.1.1TCP/IP参考模型14.1.2网间协议IP
14.1.3传输控制协议TCP14.1.4C#中相关的类14.2套接字编程技术
14.2.1IP地址和端口14.2.2套接字14.2.3面向连接的套接字14.2.4无连接的套接字14.3套接字编程实例1、.Net包括哪些内容?
主要介绍.NET的两个重要实体:公共语言运行库(CommonLanguageRuntime,CLR)和.NETFramework类库(FrameworkClassLibrary,FCL),以及其它核心成分。
2、什么是.NetFramework?
.NET平台又称.NET框架(.NETFramework),是.NET的核心组成部分,提供了一个多语言组件开发和执行的环境一个完全可操控的安全的和特性丰富的应用开发执行环境,这不但使得应用程序的开发和发布更加简单,并且实现了众多种类语言间的无缝集成。
3、公共语言运行库
公共语言运行库(CommonLanguageRuntime,CLR)又称为公共语言运行时或公共语言运行环境,是.NET系统构架中核心的部分,负责执行代码、管理内存、提供安全性等核心功能。它是构成.NET框架的两个实体中的一个。
CLR和Java虚拟机一样是一个运行时环境,其主要功能包括:
执行和管理:完成运行过程中的代码加载、应用程序和托管对象的内存管理、对
象自动布局、使用JIT(JustInTime)编译器将MSIL(Microsoftintermediatelanguage)编译成本地代码并且控制代码执行、处理异常等全部步骤。
提供安全保证:类型安全、代码访问安全、控制托管和非托管代码的互操作。对开发者的支持:提供界面信息,帮助调试等。
4、代码执行过程
在.NET中,将代码分为托管代码(managedcode)和非托管代码(unmanagedcode)两种
C#.NET源程序VB.NET源程序
CLS:公共语言运行规范C#编译器VB.NET编译器MSIL:Microsoft中间语言CLR:公共语言运行库(JIT:justintime编译器)
本地代码
代码执行流程
5、开发.NET的应用程序使用两种环境SDK和IDE,二者区别与联系SDK和IDE分别是Microsoft的softwaredevelopmentkit(软件开发工具包)和integrateddevelopmentenvironment(集成开发环境)的缩写。
采用SDK开发,首先使用文本编辑器编写代码,然后用命令行编译和执行。开发控制台程序通常使用SDK环境。
IDE是可视化的开发环境,所谓可视化编程,是一种自动或半自动的编程方法。在编程过程中,程序员利用系统提供的图形元素,组合成所需要的界面或组合成能够体现程序逻辑的流程,系统就能自动地产生部分代码或全部代码。在IDE中,程序员可以利用系统中提供的图形元素组合成界面,开发Windows窗体应用程序和Web应用程序。
6、IDE上直接支持的应用程序的主要类型有哪些?
1、Windows应用程序
Windows应用程序是基于Windows窗体(WindowsForms)的应用程序,是一种基于图形界面接口GUI的应用程序,一般是在用户计算机本地运行。
2、Windows控件库
可以创建Windows窗体应用程序的自定义控件,以方便用户的使用。3、ASP.NETWeb应用程序
ASP.NET是.NET中统一的Web开发平台,可以用来开发企业级的Web应用程序。ASP.NET使程序员能够像设计Windows窗体应用程序一样设计Web应用程序,并且采用代码分离技术,使代码与HTML文档分离,方便代码重用,还具有服务器控件的开发能力,能够在IDE中进行可视化的开发。
4、ASP.NETWebService
WebService是Microsoft的.NET战略中的重点,由于XML(extensiblemarkuplanguage)是当今Internet和各类系统之间数据交换的标准,所以也称为XMLWebServices,它可以实现客户端服务器或服务器客户端之间的数据交换。
XMLWebServices采用松耦合的分布式结构,不与特定的组件技术或对象调用约定相关联,也与编程语言、组件模型、操作系统等无关。一般的Web程序,如浏览器,是人与程序的对话,而WebService是程序与程序的对话。WebService是公认的Internet下一个最大的浪潮,也是Internet应用中最有影响的服务。
5、智能设备应用程序
Internet不仅可以连接PC机、服务器等计算机设备,也可以连入电视机、电冰箱、打印机等家用的或办公的电器,可以通过Internet进行远程控制,智能设备应用程序就是连接、控制这些设备,并互相通信的应用程序。
6、ASP.NET移动Web应用程序
此类应用程序应用于能无线上网的移动数字设备,常见的移动设备有移动电话、PDA、笔记本电脑等。.NET提供移动控件来连接移动设备的设备适配器,在.NET上开发移动Web应用程序的过程和开发其它Web应用程序类似。
7、C#语言支持的两种基本数据类型
值类型和引用类型。理解这两种类型的区别是理解C#语言各种类型及其用法的基础。值类型:值类型变量存放在栈里,所以直接包含有它们的数据,每个值类型变量
都有它自己的副本,因此对一个变量的操作不会影响到另一个变量。
引用类型:引用类型的存储分为两部分,引用类型中对数据的引用存放在栈里面,
而引用类型的数据存放在堆里面。所以引用类型变量的名不包含它的数据,而是只包含对它的数据的引用。引用类型变量的数据存储在一个实例中,不同的变量可以引用同一个对象的实例,因此在对一个引用变量操作时,改变实例值时将会影响其他引用这个实例的引用变量,在编程中要格外注意。8、C#语言提供了两种实现继承的方式:类的继承和接口继承。他们的区别与联系.通常把作为基础、被继承的类称为基类,继承别的类的子类称为派生类。一个类从另一个类派生出来时,派生类从基类那里继承特性。派生类也可以作为其它类的基类。C#中,派生类只能从一个类中继承,不支持多继承的机制。如果必须使用多重继承,可以使用接口继承来实现。
9C#的关键字abstractchardofinallyinnewsizeoftrueusingnewabstractsealedpublicprotectedinternalprivate只允许用在嵌套类中,表明隐藏了从基类继承而来、与基类中同名的成员说明该类是一个抽象类,该类含有抽象成员,因此不能被实例化,只能用来做其他类的基类,而不能产生对象说明该类是一个密封类,不能做其他类的基类,不能再派生新的类表示外界可以不受限制的访问该类。类的访问权限省略时默认为public该类只能被这个类的成员或类派生成员访问表示该类能由程序集中的所有文件使用,而不能由程序集之外的对象使用表示该类只能被这个类的成员访问ascheckeddoublefixedintnullstackalloctryvirtualbaseclasselsefloatinterfaceobjectreadonlystatictypeofvolatileboolconstenumforinternalrefstringuintvoidbreakcontinueeventforeachisreturnstructulongwhilebytedecimalexplicitgotolockoverridesbyteswitchuncheckedcasedefaultexterniflongparamssealedthisunsafecatchdelegatefalseimplicitnamespaceprivateshortthrowushortoperatoroutprotectedpublic
10、C#的基本数据类型
值类型简单类型用户自定义类型枚举类型接口用户自定义类型指针类型类型引用类型类类型数组委托字符串用户自定义类型接口指针类型
图2.1C#的类型值类型包括三种:简单类型、枚举类型和自定义类型(这里指结构)。将在2.3小节介绍前两种值类型,在第5章介绍结构类型。
引用类型包括类(class)、接口(interface)、委托(delegate)、数组(array)、字符串(String)和Object以及不提倡使用的指针类型。习惯将引用类型的变量称为对象,而值类型的变量仍然称为变量。引用类型和值类型的最大区别是引用类型的数据存储在堆中,而在栈中存储它的数据的引用。
位运算符“>1);输出结果是:
有符号数右移1位:-128无符号数右移1位:128
知识点汇总
1、什么是面向对象程序设计?
2、什么是类?类的多态、封装、继承作用是什么?
类的成员由两部分组成,一部分是类体中以类成员声明形式引入的类成员,另一部分是直接从它的基类继承而来的成员。类的成员主要包括数据成员和方法成员,类是完成对它们封装的结构类型。类的数据成员可以是常量、字段和对象等。方法成员包含方法、属性、索引器、事件、操作符、构造函数、析构函数等。当字段、方法、属性、事件、运算符和构造函数声明中含有static修饰符时,则表明它们是静态成员,否则就是实例成员。静态成员属于类,而实例成员属于对象。
类成员声明时,可以使用以下5种访问修饰符中的一种:public、protected、internal、private、protectedinternal。当类成员声明中不包含访问修饰符时,默认访问修饰符为private。
多态就是指一个成员在不同的上下文中表现出不同的功能。多态是面向对象程序设计中重要概念和常见技术,也是一种代码重用技术。虚成员和虚成员的重写是多态技术的基础。
根据C#是在编译时还是在运行时确定得调用不同类对象的哪个同名成员,将多态分为如下两种:编译时多态和运行时多态。
编译时多态是指在编译时就能确定调用什么对象中的成员,也称为早绑定。隐藏、重载都属于早期绑定,即编译时多态。运行时多态是指只有当运行时才能确定调用哪个对象中的成员,又称为晚绑定。虚方法、重写是晚绑定,即运行时多态。一般所说的多态性均为运行时多态。
3、构造方法(构造函数)
构造函数的重载是常见的现象,同一个类中有多个构造函数,区别他们的依据是参数列表,同一个类中任意两个构造函数的参数列表必须不同,参数列表只要具备下列条件之一,就可以认为是不同的参数列表,进而可以认为是两个重载的构造函数:
1)参数列表中参数个数不同;
2)参数列表中参数个数相同,但参数类型不同;
3)参数列表中参数个数相同,参数类型种类也相同,但排列的次序不同。
4、属性
属性由两部分组成:属性头和存取器。存取器分为get访问器和set访问器。下面给出属性的声明。
语法形式:
[修饰符]类型说明符属性名{
访问声明}
其中:修饰符new,public,protected,internal,private,static,virtual,override和abstract9种。
访问声明用来声明属性访问器。给属性赋值时使用set访问器,获取属性值时使用get访问器。在访问声明中,如果只有get访问器,表示是只读属性;如果只有set访问器,表示只写属性;两个都有,表示读写属性。
set访问器是一个带有简单值类型参数的方法,用于处理类外部的写入值。set访问器带有一个特殊的关键字value,value就是set访问器的隐式参数,在set中通过value将外部的输入传递进来,然后赋值给类中的某个变量成员。get访问器是一个不带参数的方法,它用于向外部返回属性成员的值。通常访问函数的语句或语句块主要由return或throw语句返回某个变量成员的值。为了实现良好的数据封装和数据隐藏,类的字段成员的访问属性一般设置为private或protected,这样在类的外部就不能直接读/写这些字段了,通常的办法是提供public级的方法来访问私有的或保护的字段。为了实现对数据成员更好地封装和保护,同时又向外界提供更有效的访问形式,C#采用属性来实现这种目标。属性是一种特殊的成分,它具有方法的本质,又具有字段的形式,即属性的定义类似于方法的定义,属性的使用类似于字段的使用。属性完善了C#的封装功能,使得所有的数据成员都可以成为私有成员,从而更好地体现了面向对象程序设计的封装性。
5、索引器
索引器允许按照与数组相同的方式对类、结构或接口进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。下面给出索引器的声明。语法形式:
[修饰符]索引器声明符{
访问器声明}其中:
修饰符可以是new、virtual、sealed、override、abstract、extern以及public、protected、internal、private四个访问修饰符的有效组合。注意,索引器修饰符不可以是static的。
索引器声明符的形式有两种,分别是:类型this[形参表]或
类型接口类型this[形参表]
注意此处“[]”不表示可选,是索引器声明符的必要部分。而this是C#中的关键字,除了可以声明索引器以外,还用于限定被相似的名称隐藏的成员、将对象作为参数传递到其它方法。
访问器声明,也要使用get()和set()访问器,不同的是使用索引指示器取得的对象是对象中各元素的值,而不是特定的数据成员。使用索引器的形式为:对象名.[实参]
使用索引器也是C#的一个特色,一个类往往包含了数组型的对象,索引器使得可以像数组那样对对象使用下标,为我们提供了通过索引方式方便地访问类的数据信息的方法。6、抽象类特点是什么?举例说明
用关键字abstract修饰的抽象类是一种没有被完整定义的类,因此它不能用来实例化,也就是说,不能产生对象。设计abstract类的目的是为了被继承,其意义在于:1)、包含派生类的公有成员。这些公有成员在抽象类中定义一次,就可以被反复使用,提高软件开发的效率和可维护性。2)、规范行为。抽象方法等具体行为特征的成员实际上是一种建模过程,规定了输入口和输出口,而将实现的细节留给派生类根据实际情况编程。同一个抽象类的派生类有许多共性,这使得它们有了交互的基础。下面给出抽象类的声明。
语法形式:
abstractclass类名{
}抽象类不能产生实例,因此不能这样书写代码,如:
抽象类名对象名=new抽象类名(参数列表)new抽象类名(参数列表)。这样的代码都是错误的。设计抽象类时要注意以下几点:1)、抽象类虽然不能产生对象,但可以有构造函数。2)、抽象类是要被继承的,所以不能和sealed修饰符联用。
3)、抽象类的派生类可以依然是抽象类,只有当派生类实现了所有抽象成员后,才演化为一个普通的类,这时才能产生对象。
7、抽象方法
用abstract修饰的方法、属性和索引器分别称为抽象方法、抽象属性、和抽象索引器。它们共同特点是只有行为的定义,却没有行为的实现。
抽象方法是只有方法头,没有方法体的方法。抽象方法的声明格式如下。语法形式:
abstract返回类型方法名(参数列表);
抽象方法规定了方法的输入参数的类型和数量以及输出的类型,以此定义了方法的激励和响应的形式,而在内容上可由实现者任意实现,因此仅凭抽象方法的定义来判断方法的功能是不可靠的。
抽象属性中可以选择get和set关键字,但没有具体的执行语句,抽象属性的声明格式如下。
语法形式:
abstract返回类型属性名{get;set;}
而抽象索引器的声明形式和抽象属性的很相似。语法形式:
abstract返回类型this[参数列表]{get;set;}
在用到abstract关键字时,需要注意以下几点:1)、abstract不能和static同时修饰同一个方法。2)、abstract也不能和private同时修饰同一个方法,并且不能省略访问控制符。3)、abstract方法只能出现在abstract类中,并且只有当包含此抽象方法的抽象类被继承之后,才能在派生类中被实现。
4)、派生类实现抽象方法时必须使用关键字override,否则被默认为是缺省的关键字new。8、接口
接口是抽象成员的集合,这些抽象成员可以是抽象方法、属性、索引器、事件,接口是实现多继承的工具。实际上,接口是一些实现特定功能的抽象成员的集合。一个类可以继承多个接口,从而获得多个行为的描述,将它们组合成新的功能并在类中实现。
接口的声明。
语法形式:
[接口修饰符]interface接口名:[基接口列表]{
接口体}
其中:
接口修饰符有new、public、protected、internal、private。Interface声明接口时的关键字。
接口名一个标识符,首字母为大写的I。“:”表示继承,接口可以多继承。
基接口列表是一个或多个基接口类型,正在被定义的接口将继承基接口列表中的所有基接口,出现在基接口列表中的基接口也可能继承了其他的接口,为了方便区分,把出现在基接口列表中的基接口称为显式基接口。基接口之间用“,”分割。接口继承其所有基接口的所有成员,也可以用new隐藏基接口的成员
usingSystem;
publicinterfaceIgram//声明图形接口{
doubleArea();
doubleGramLength();intSides{get;}}
publicinterfaceIDisplay//声明输出接口{
voidPrint();}
publicclassSquare:Igram,IDisplay{
privateintsides;
publicintSideLength;publicSquare()//构造函数{
sides=4;}
publicintSides//实现Igram接口的Sides属性成员{
get{returnsides;}}
publicdoubleArea()//实现Igram接口的Area方法成员{
return((double)(SideLength*SideLength));}
publicdoubleGramLength()//实现Igram接口的GramLength方法成员{
return((double)(Sides*SideLength));}
publicvoidPrint()//实现IDisplay接口的Print方法成员{
Console.WriteLine("\\n计算正方形面积结果如下:");Console.WriteLine("边长:{0}",this.SideLength);Console.WriteLine("周长:{0}",this.GramLength());Console.WriteLine("面积:{0}",this.Area());}}
publicclassApp{
publicstaticvoidMain(){
Squaresq=newSquare();sq.SideLength=5;sq.Print();}}
运行结果:
在同一个类Square中实现了两个接口:Igram和IDisplay。
9、参数传递
C#中传入到方法中的参数不同,可分为4种:传递值类型的参数、传递引用类型的参数、传递多个引用类型参数和传递个数不确定的参数。
传递多个引用类型参数
return语句一次只能返回一个结果,针对这种情况,C#提供了一种特殊的参数传递方式:传递多个引用类型参数。完成这种数据传递方式所使用的是输出型参数,用关键字out表示。与引用型参数类似,输出型参数也不开辟新的内存区域。它与引用型参数的区别:调用方法前无需对变量进行初始化,正因为如此,在out参数没有被显示地赋值之前,不能使用。在将实参作为输出型参数传递的调用完成后,该实参变量将会被该方法中的形参明确赋值,并将数据从方法中传出至调用处。out修饰符后应跟随形参类型相同的类型声明。
下面给出输出型参数的实例,usingSystem;
publicclassCalculate{
publicvoidCal(intinNum,outintoutNum1,outintoutNum2){
outNum1=inNum*inNum;outNum2=inNum*10;}}
classTest{
publicstaticvoidMain(){
Calculatecal=newCalculate();intoutnum1;//不必初始化intoutnum2;//不必初始化
cal.Cal(35,outoutnum1,outoutnum2);
Console.WriteLine("outnum1:{0}",outnum1);Console.WriteLine("outnum2:{0}",outnum2);}}
运行结果:
传递个数不确定的参数
当需要传递的参数个数不确定时,如求几个数的最大值,由于没有规定是几个数,运行程序时,每次输入的值的个数不一定一样。为了解决这个问题,C#采用参数数组。形参数组前如果用params修饰符进行声明就是参数数组,通过参数数组可以向函数传递个数变化的参数。usingSystem;classParamsTest{
staticintParamsMeth(refintsum,paramsint[]arr){
inti;
for(i=0;i
sum=sum+arr[i];arr[i]=arr[i]*arr[i];}
return(arr[arr.Length-1]);}
staticvoidMain(){
int[]a={1,2,3};inti,L;
ints=0,z=0;
ParamsMeth(refs,a);//数组作为实参
Console.WriteLine("数组作为实参的结果:");Console.WriteLine("和为:{0}",s);for(i=0;i
Console.WriteLine("a[{0}]={1}",i,a[i]);
Console.WriteLine("与形参数组的元素属于同一类型的变量做实参的结果:");L=ParamsMeth(refz,23,45);//与形参数组的元素属于同一类型的变量做实参Console.WriteLine("和为:{0}",z);
Console.WriteLine("输入最后数值的乘积:{0}",L);}}
运行结果:
10、语句
常用的简单语句包括赋值语句、空语句、表达式语句、复合语句等C#中常用的三种分支技术:条件运算符;if语句;switch语句。C#提供了4种循环语句:while、do_while、for和foreachbreak语句、continue语句、goto语句、return语句等。1)break语句
除了在switch语句中使用break语句,它还用于循环结构中,作用是结束其所在的结构语句。它的格式是:break;
break语句的目标地址为包含它的switch、while、do、for、或foreach语句的结尾,如果不在这些语句块中,编译将出错。2)continue语句
continue语句用于循环结构中,其作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环体的判定。格式是:continue;continue语句重新开始一次包含它的while、do、for、或foreach语句的执行,其目标地址也是上述这些语句的内嵌语句结尾,如果不在这些语句块中,编译将出错。
continue语句和break语句的区别是:continue只跳出一次循环,而break语句则跳出整个循环语句或switch语句。当有switch、while、do、for或foreach语句相互嵌套的时候,break语句只是跳出直接包含它的那个语句块。如果要在多处嵌套语句中完成转移,必须使用goto语句。3)goto语句
goto语句的功能是将控制转到由标签标记的语句。格式是:goto标号标识符;
需要注意的是,goto语句使用比较方便,但是容易引起逻辑上的混乱,因此除了在switch语句中必须从一个case跳到另一个case的情况下可以使用goto语句外,其他情况下最好不要使用goto语句。4)return语句
return语句的功能是从它所在的子函数返回该子函数的调用者。格式:return[表达式];
注意,此处的“[]”符号,表示其里面的表达式是可选的。
不带表达式的return语句只有在不需要计算数值的子函数中出现,也就是,其返回类型为void。带表达式的return语句只能用在计算数值的函数成员中,也就是其返回类型是非void。
5)throw语句,它的作用是抛出异常
11、公共语言运行库(CommonLanguageRuntime,CLR)
12、NETFramework类库(FrameworkClassLibrary,FCL)
1)System.Object类
2)异常处理Exception3)文件类
System.IO中包含用于在文件中读取和写入数据的类。
System.IO.Directory公开用于创建、移动和枚举目录和子目录的静态方法。System.IO.File提供用于创建、复制、删除、移动和打开文件的静态方法。System.IO.Path处理路径名称。
System.IO.DirectoryInfo公开用于创建、移动和枚举目录和子目录的实例方法。System.IO.FileInfo创建、复制、删除、移动和打开文件的实例方法System.IO.FileStream以文件为主的Stream,既支持同步读写操作,也支持异步读写操作。
System.IO.StreamReader从字节流中读取字符。System.IO.StringWriter向流中写入字符。
System.IO.FileSystemWatcher侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。
StreamReader,StreamWriter完成文件的读写操作,String.Split()完成字符串的拆分。
openFileDialogsaveFileDialog
引用一个OpenFileDialog对象.为检查用户在退出对话框时是否单击了”打开”按钮,应检查对象.ShowDialog()的返回值是否等于DialogResult.OK
用FileStream打开一个文件时,可用FileMode参数控制4)图形类
Pen类的构造函数有四种,使用方法如下。(1)创建某一颜色的Pen对象:publicPen(Color)(2)创建某一刷子样式的Pen对象:publicPen(Brush)
(3)创建某刷子样式并具有相应宽度的Pen对象:publicPen(Brush,float)(4)创建某一颜色和相应宽度的Pen对象:publicPen(Color,float)Pen对象的常用属性
(1)Alignment属性:用来获取或设置此Pen对象的对齐方式。(2)Color属性:用来获取或设置此Pen对象的颜色。画椭圆
[格式1]:publicvoidDrawEllipse(Penpen,Rectanglerect);
[格式2]:publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight);
(3)Width属性:用来获取或设置此Pen对象的宽度。画矩形
[格式1]:publicvoidDrawRectangle(Penpen,Rectanglerect);[格式2]:publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight);
13、异常处理都处理哪些错误,举例说明;
异常(Exception)是程序执行时遇到的任何错误情况或意外行为。如除数为零、分配内存空间失败,都能引发异常。异常处理(ExceptionHanding)指的是一种机制或方法,通过它,用户创建的应用程序能够解决或处理异常。
C#提供了一个标准类System.Exception,此类是所有异常的基类。基类Exception下存在两类异常:一个是从SystemException派生的预定义公共语言运行库异常类,另一个是从ApplicationException派生的用户定义的应用程序异常类。Exception包含很多属性,可以帮助标识异常的代码位置、类型、帮助文件和原因,常用属性如下所示:
HelpLink属性:获取或设置指向此异常所关联帮助文件的链接。InnerException属性:获取导致当前异常的Exception实例。Message属性:获取描述当前异常的消息。
Source属性:获取或设置导致错误的应用程序或对象的名称。
StackTrace属性:获取当前异常发生时调用堆栈上的帧的字符串表示形式。argetSite属性:获取引发当前异常的方法。
14、ADO.NET有哪些数据对象?各有什么功能?
NETFramework数据提供程序的实质是数据源与应用程序的桥梁,并且都有一定的标准,它们都实现了相同的基类:Connection、Command、DataAdapter和DataReader.Connection对象主要用于建立与数据源的活动连接。
Command对象可以对数据源执行查询、插入、删除、更新等各种操作。
DataReader对象是从一个数据源中选择某些数据的最简单方法,尤其适合读取大量的数据,因为它不在内存中缓存。
DataAdapter是连接到数据库以填充DataSet对象
usingSystem;
usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;
usingSystem.Windows.Forms;usingSystem.Data.OleDb;db1.OleDbConn.Open();OleDbCommand
OleDbConnectionOleDbConn=newOleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;dataSource=./telephone.mdb;PersistSecurityInfo=False");SqlConnectionconn=newSqlConnection(str);
SqlDataAdapterda=newSqlDataAdapter();
15、ASP.NET有哪些内置对象?ASP.NET中有哪些验证控件?Global.asax文件的功能?
16、.NETFramework有哪些数据提供程序?各自位于哪个命名空间?17、ADO.NET使用System.Data.SqlClient命名空间的类访问SQLServer数据库中的数据;使用System.Data.OleDb访问Access数据库中的数据。。。18、连接字符串的设置、数据库连接组件的用法、19、OleDbCommand控件的使用
20、有几种方法可以实现页面跳转?
21、.aspx中主要控件
包括:TextBox控件、下拉列表框(DropDownList)、验证控件、Button控件、RangeValidator、GridView、DataSet控件
22、VisualStudio.NET的窗口解决方案资源管理器、类视图、资源视图、属性可以查看哪些内容?23、关键字
interface从派生类中访问基类的成员,可以使用base关键字、this关键字、overrideg、using关键字作用
调用被隐藏的基类的成员,必须要使用base关键字。若访问被继承但是没有被签名相同的派生类成员隐藏的基类成员,则不必使用base关键字,因为它们在派生类中仍然是唯一的。
24、Web.config文件的功能
Web站点的配置,可以直接在Internet服务管理器(IIS)上进行,使用也比较方便,但是这种方法有一个缺点:扩展性和灵活性较差。为了提高扩展性和灵活性,ASP.NET专门设置一个Web.config文件来保存配置信息。与Global.asax文件不同,Web.config不一定要放在Web应用程序的根目录下。同一个Web应用程序下的所有子目录都可以拥有自己的Web.config文件。此时IIS会先继承根目录下的配置设置,如果遇到相同的配置标记,则现行目录下的Web.config配置将覆盖根目录下同名的配置设置。
1)配置与调用数据库链接字符串
在Web.config文件中可以使用配置节来配置应用程序的配置数据库链接字符串。在配置数据库链接字符串时,使用方式,并设置两个键/值对,键的名称为name和connectionString。配置数据库链接字符串的程序代码如下:
采用下面方式可以读取此种设置方式:
stringsqldb=ConfigurationManager.ConnectionStrings["Sqlserver"].ConnectionString;
也可以在与之间设置数据库的链接字符串。代码如下:
"RemoteOnly"只对不在本地Web服务器上运行的
用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便不向远程客户端显示应用程序的详细信息。-->配置节
配置节可以用来配置应用程序级别跟踪,为应用程序中的每一页启用跟踪日志输出。配置节的一种配置的程序代码如下:
配置节
配置节用来配置应用程序的身份验证策略,主要包括有Windows、Form、Passport和None。配置节的一种配置的程序代码如下:
25、数据库中表的增加、查找、修改和删除。
26、验证控件
ASP.NET验证控件控件名功能RangeValidatorRegularExpressionValidatorRequiredFieldValidatorValidationSummaryCustomValidatorCompareValidator检查用户的输入是否在一个特定的范围内检查用户的输入是否与正则表达式所定义的模式一致检查用户是否在输入控件中输入了数据显示页面上所有验证控件所搜索到的验证错误通过用户自定义函数判定输入的数据是否有效将输入控件的值同常数值或其它输入控件的值相比较,以确定两个值是否与由比较运算符(>、=、Global.asax文件,正如在第九章中已经介绍到的,Global.asax文件必须存放在Web主目录中,当浏览器与Web服务器连接时,会先去检查Web主目录有没有Global.asax文件,若有,就先去执行该文件。在Global.asax文件中有一些特定的事件很有用,下面按事件触发顺序给出几个常用的事件:
1)、Application_Start事件
第一个用户首次请求页面时触发。
2)、Session_Start事件
每个用户首次请求页面时触发。
3)、Session_End事件
在关闭应用程序或每个用户在规定时间内没有提出请求时触发。
4)、Application_End事件
在关闭应用程序或最后一个用户在规定时间内没有提出请求时触发。
一般情况下,可以在Application_Start事件中定义并初始化公用变量,以便所有请求页面的用户都能共享这些变量。由于每个用户都有自己的Session,所以可以在Session_Start事件中为客户设置初始化信息。
29、简单数据绑定和复杂数据绑定30、单值绑定和多值绑定
1、单值绑定
单值绑定是指将一个数据绑定到一个单值控件上,单值控件一次显示一个数据。大多数Web服务器控件和HTML控件都是单值控件,如TextBox、Label、Input(Text)控件。其实,所有的控件都允许把数据赋予它的某个属性,以完成单值绑定。例如,在实际应用中,可以使用ADO.NET技术从数据库中获得某个数据,然后将其赋予Label的Text属性或ListBox的BackColor属性等,就完成了单值绑定。
2、多值绑定
多值绑定是指将一组数据绑定到多值控件上,多值控件可以同时显示一个或多个数据记录,如Web服务器控件的ListBox、RadioButtonList、CheckBoxList等。在Web应用中,.NET提供了多值数据绑定控件又可以分为:列表控件和复合绑定控件。列表控件有:DropDownList、ListBox、RadioButtonList和CheckBoxList控件等;复合绑定控件有Repeater、DataList、以及由DataGrid控件改进的GridView控件。
另外,根据绑定数据的时间不同,.NET的数据绑定技术还可以分为以下两种:1)、在设计时绑定:在设计系统时指定绑定控件的数据源。
2)、在运行时绑定:用编程的方式,在系统运行时指定绑定控件的数据源。
31、Web服务器控件
属于System.Web.UI.WebControls命名空间,大多数Web服务器控件类是从该命名空间的基类WebControl直接或间接派生的。32、GridView控件
GridView控件是ASP.NET2.0新增加的控件,是最常用的数据绑定控件,用于以表格形式在页面上显示数据。
.1GridView控件概述
GridView控件是一个网格状的数据绑定控件,用于以表格的形式来显示、编辑和删除多种不同数据源(数据库、XML文件等)中的数据。以表格显示数据源的值,表中每列表示一个字段,而每行表示一条记录。GridView控件具有如下功能:
1)、通过数据源控件自动绑定和显示数据。2)、内置排序、更新和删除功能。3)、内置分页、行选择功能。
4)、可通过主题和样式进行自定义外观。
添加GridView控件,可以在页面的HTML视图中通过添加代码实现。例如,要添加ID为“GridView1”的控件,代码如下:
或在设计视图中直接拖拽工具箱中的GridView控件图标来添加。添加后的控件如图10.5所示。
图10.5GridView控件设计视图
.2常用属性、方法和事件
1、常用属性
GridView控件功能很强大,常用的属性有:
AllowSorting属性:获取或设置一个值,该值指示是否启用排序。
AutoGenerateColumns属性:获取或设置一个值,该值指示是否为数据源中的每个字段自动创建绑定字段。
Columns属性:获取表示GridView控件中列字段的DataControlField对象的集合。CssClass属性:获取或设置由Web服务器控件在客户端呈现的级联样式表(CSS)类。
DataMember属性:当数据源包含多个不同的数据项列表时,获取或设置数据绑定控件绑定到的数据列表的名称。
DataSource属性:获取或设置对象,数据绑定控件从该对象中检索其数据项列表。DataSourceID属性:获取或设置控件的ID,数据绑定控件从该控件中检索其数据项列表。EditIndex属性:获取后设置要编辑的行的索引。
EditRowStyle属性:获取对TableItemStyle对象的引用,使用该对象可以设置GridView控件中为进行编辑而选中的行的外观。
Page属性:获取对包含服务器控件的Page实例的引用。
Rows属性:获取表示GridView控件中数据行的GridViewRow对象的集合。SelectedIndex属性:获取或设置GridView控件中的选中行的索引。
ShowFooter属性:获取或设置一个值,该值指示是否在GridView控件中显示脚注行。
ShowHeader属性:获取或设置一个值,该值指示是否在GridView控件中显示标题行。
SortDirection属性:获取正在排序的列的排序方向。
SortExpression属性:获取与正在排序的列关联的排序表达式。2、常用方法
GridView控件常用方法有:
DataBind()方法:将数据源绑定到GridView控件。
DeleteRow()方法:从数据源中删除位于指定索引位置的记录。FindControl()方法:在当前的命名容器中搜索指定的服务器控件。
Sort()方法:根据指定的排序表达式和方向对GridView控件进行排序。UpdateRow()方法:使用行的字段值更新位于指定行索引位置的记录。3、常用事件
GridView控件提供在导航或编辑操作之前和之后发生的事件,而在每次发生事件时都可以运行一个自定义程序。GridView控件常用的事件有:
PageIndexChanged事件:在单击某一页导航按钮时,但在GridView控件处理分页操作之后发生。
PageIndexChanging事件:在单击某一页导航按钮时,但在GridView控件处理分页操作之前发生。
RowCancelingEdit事件:单击编辑模式中某一行的“取消”按钮以后,在该行退出编辑模式之前发生。
RowCommand事件:当单击GridView控件中的按钮时发生。RowCreated事件:在GridView控件中创建行时发生。
RowDataBound事件:在GridView控件中将数据行绑定到数据时发生。
RowDeleted事件:在单击某一行的“删除”按钮时,但在GridView控件删除该行之后发生。此事件常用于检查删除操作的结果。
RowDeleting事件:在单击某一行的“删除”按钮时,但在GridView控件删除该行之前发生。此事件常用于取消删除操作。
RowEditing事件:发生在单击某一行的“编辑”按钮以后,GridView控件进入编辑模式之前。此事件通常用于取消编辑操作。
RowUpdated事件:发生在单击某一行的“更新”按钮,并且GridView控件对该行进行更新之后。此事件通常用于检查更新操作的结果。
RowUpdating事件:发生在单击某一行的“更新”按钮以后,GridView控件对该行进行更新之前。此事件通常用于取消更新操作。
SelectedIndexChanged事件:发生在单击某一行的“选择”按钮,GirdView控件对相应的选择操作进行处理之后。此事件常用于在该控件中选定某行之后执行某项任务。SelectedIndexChanging事件:发生在单击某一行的“选择”按钮以后,GirdView控件对相应的选择操作进行处理之前。此事件常用于取消选择操作。
Sorted事件:在单击用于列排序的超链接时,但在GridView控件对相应的排序操作进行处理之后发生。此事件常用于在用户单击用于列排序的超链接之后执行某个任务。
Sorting事件:在单击用于列排序的超链接时,但在GridView控件相对的排序操作进行处理之前发生。此事件常用于取消排序操作或执行自定义的排序程序。
.3GridView中的字段类型
GridView控件中的每一列由一个DataControlField对象表示。默认情况下,AutoGenerateColumns属性被设置为true,为数据源中的每一个字段创建一个AutoGeneratedField对象。然后每个字段作为GridView控件中的列呈现出来,其顺序和每个字段在数据源中的顺序相同。
将AutoGenerateColumns属性设置为false,然后可以自己定义列字段集合,也可以手动控制哪些字段将显示在GridView控件中。列字段集合可以用声明方式定义,需要在GridView控件的开始和结束标记之间添加标记。然后在此标记之间列出想要包含在内的列字段,这些包含在内的列将以所列出的顺序添加到Columns集合中。Columns集合存储该控件中的所有列字段,并可以以编程方式管理GridView控件中的列字段。
不同的列字段类型决定控件中各列的行为。下面给出可以使用的不同列字段类型:BoundField:显示数据源中某个字段的值,是GridView控件的默认列类型。
ButtonField:为GridView控件中的每一项显示一个命令按钮,即整列由按钮组成,可以是Button、ImageButton或LinkBotton。
CheckBoxField:为GridView控件中的每一项显示一个复选框。这种列字段类型常用于显示布尔值类型的字段。
CommandField:在GridView控件中显示用于执行选择、编辑、插入或删除操作的命令按钮。这些命令按钮不需要编写任何代码就可以实现相应的操作。
HyperLinkField:将数据源中的某个字段的值在GridView控件中显示为超链接。ImageField:为GridView控件中的每一项显示一个图像。
TemplateField:根据指定的模板为GridView控件中的每一项显示用户定义的内容。常用于显示控件。
.4GridView数据显示
GridView控件可绑定到数据源控件以及实现了System.Collections.IEnumerable接口的任何数据,如System.Data.DataView、System.Collections.ArrayList、System.Collections.Hashtable等。显示这些数据分为两种情况:自动显示数据和定制显示数据。
1、自动显示数据
若要绑定到某个数据源,将GridView控件的DataSourceID属性设置为该数据源控件的ID值。GridView控件自动绑定到指定的数据源控件,还可以非常简单地进行数据的显示。较常用的数据源是SqlDataSource。下面通过一个实例:介绍自动显示数据的过程。将数据表StudentInfo中的数据通过SqlDataSource数据源自动显示在GridView中。
1)、新建项目,在项目中创建GVexample.aspx页面。2)、在页面上添加一个GridView控件,在本例中保留的默认设置。3)、通过SqlDataSource创建一个访问关系数据库的控件。
4)、将GridView的DataSourceID设置为SqlDataSource对象的ID。设置完后的页面如图所示。
GridView自动显示数据界面
对应GVexample.aspx页面的HTML代码如下:htmlxmlns="">
GridView实例
此实例不需要编写任何代码,直接编译运行,运行结果如图10.7所示。
图10.7GridView自动显示数据运行结果
为了使GridView的外观更加美观,可以设置以下属性:
AlternatingRowStyle属性:GridView控件中的交替数据行的样式设置。当设置了此属性后,数据行交替使用RowStyle设置和AlternatingRowStyle设置进行显示。EditRowStyle属性:GridView控件中正在编辑的行的样式设置。
EmptyDataRowStyle属性:当数据源不包含任何记录时,GridView控件中显示空数据行的样式设置。
FooterStyle属性:脚注行的样式设置。HeaderStyle属性:标题行的样式设置。PagerStyle属性:页导航行的样式设置。RowStyle属性:数据行的样式设置。
SelectedRowStyle属性:选中行的样式设置。
在IDE环境中,可以方便地在属性窗口中设置这些属性。此外,GridView控件内置了一个GridView任务设计器,通过其中的“自动套用格式”超级链接,可以自动套用.NET内置的一些常见的格式。
2、定制显示数据
在例10-4中,GridView控件的AutoGenerateColumns属性保持的默认值:true,这为数据源中的每一列自动创建一个BoundField列,其标头为该列在数据源中的列名,数据按在数据源中的顺序全部显示出来。在有些情况下,不需要这样显示。如,想要改变列的先后顺序或改变GridView中显示的标头,或显示数据源中部分字段的值。上述情况,就需要定制显示数据。若要定制显示数据,首先要设置AutoGenerateColumns属性为false,即不能让GridView自动产生列,而是通过编辑Columns属性设置各个列的定义。
下面通过实例:例10-5来介绍定制显示数据方式。在例10-5中,有两个页面Show.aspx和Display.aspx页。在Show.aspx页中添加一个GridView控件,在此控件中只显示表StudentInfo表中的学号、姓名和班级,并将班级显示为超链接的列,单击超链接跳转到Display页面。
例10-1)、新建项目
新建项目,在项目中加入Show.aspx和Display.aspx页。在Show.aspx页中加入一个GridView控件,设置其AutoGenerateColumns属性为false,然后,编辑Columns属性设置各个列的定义。Display.aspx页不需要做任何设置,创建完后的项目如图10.8所示。
图10.8GridView定制显示数据界面
对应的Show.aspx页的HTML代码如下:
这里,语句实现添加标题为“编号”的列,而该列要显示的数据由属性DataField决定,当赋值为StudentID,表示可以显示数据源中的字段“StudentID”。在Columns定义的最后,添加了超链接列:HyperLinkField。下面给出HyperLinkField的属性:
DataNavigateUrlFields属性:获取或设置数据源中字段的名称,用于为HyperLinkField对象中的超链接构造URL。
DataNavigateUrlFormatString属性:获取或设置用于指定格式的字符串,HyperLinkField对象中的超链接的URL将以此格式呈现。
DataTextField属性:获取或设置数据源中的字段的名称,此名称包含要为HyperLinkField对象中的超链接标题显示的文本。
DataTextFormatString属性:获取或设置用于指定格式的字符串,HyperLinkField对象中的超链接标题将以此格式显示。Text属性:超链接列中显示的文本。
NavigateUrl属性:当单击列中的超级链接时链接到的URL。在本例中,设置了如下属性:DataNavigateUrlFields="StudentID"
DataNavigateUrlFormatString="Display.aspx?id={0}"DataTextField="StudentID"
DataTextFormatString="#{0}>>"NavigateUrl="~/Display.aspx"这里,"Display.aspx?id={0}"中的“{0}”表示要传递的数据字段对应单击行的数据本身。2)、编辑代码
因为,没有指定GridView的数据源,因此需要编辑代码使用DataBind方法将数据源绑定到GridView中。双击Show.aspx的设计页面,进入编辑页面,输入如下代码:protectedvoidPage_Load(objectsender,EventArgse){
//连接数据库
SqlConnectionconn=newSqlConnection();
conn.ConnectionString="Server=localhost;Database=Student;UserID=sa;PWD=sa";
//使用SqlCommand提交查询命令
SqlCommandselcomm=newSqlCommand("select*fromStudentInfo",conn);try{
conn.Open();//打开连接//获取数据适配器
SqlDataAdapterda=newSqlDataAdapter();da.SelectCommand=selcomm;DataSetds=newDataSet();da.Fill(ds,"STable");
GridView1.DataSource=ds;GridView1.DataBind();}
catch(Exceptionex){
Response.Write(ex.Message);}finally{
conn.Close();//关闭连接}}
然后在编辑Display.aspx页的代码,代码如下:protectedvoidPage_Load(objectsender,EventArgse){
//得到传递的参数
stringSID=Page.Request.QueryString["id"];//连接数据库
SqlConnectionconn=newSqlConnection();
conn.ConnectionString="Server=localhost;Database=Student;UserID=sa;PWD=sa";
//使用SqlCommand提交查询命令
SqlCommandselcomm=newSqlCommand("select*fromStudentInfowhereStudentID="+SID+"",conn);try{
conn.Open();//打开连接//创建SqlDataReader
SqlDataReaderdr=selcomm.ExecuteReader();if(dr.Read()){
Response.Write("学号:"+dr["XueHao"]+"");Response.Write("姓名:"+dr["SName"]+"");Response.Write("班级:"+dr["Class"]+"");}}
catch(Exceptionex){
Response.Write(ex.Message);}
finally{
conn.Close();//关闭连接}
}3)、编译运行
运行Table.aspx页面,得到的运行结果如图10.9所示。
图10.9GridView定制显示数据结果
从图10.9可见,GridView控件中并没有把StudentInfo表中的所有列数据显示出来,而是只显示出要求显示的列:编号、学号、姓名和班级,并把最后一列设为超级链接列。单击任何一行的超级链接,都将跳转到Display.aspx页,并在Display.aspx页中显示对应的学生信息。若单击第二行的超链接,运行结果如图10.10所示。
图10.10超链接页面运行结果
10.3.5编辑和删除数据
GridView控件具有一些内置功能,允许用户不需要编程就可以编辑或删除记录。使用内置编辑或删除功能的步骤如下:
1)、为GridView添加需要的修改、删除、选择列。为GirdView控件添加这些列很简单,在属性窗口中,将AutoGenerateDeleteButton属性、AutoGenerateEditButton属性和AutoGenerateSelectButton属性的值设置为True,就可以把这些行添加上。在例10-4的基础上,添加这些列后的GridView外观如图10.11所示。
图10.11添加编辑、删除、选择列的GridView界面
2)、配置数据源。
这里采用的是SqlDataSource数据源,若想通过GridView控件内置功能实现删除、修改数据等操作,需要在对SqlDataSource数据源配置时,单击“高级”按钮,在弹出的对话框中选中“生成INSERT,UPDATE,DELETE语句”,而且,在选择数据时,一低要把主键字段选上。
然后,运行页面就可以直接实现编辑、删除的功能了。运行页面,单击第一行的编辑按钮,页面如图10.12所示。
图10.12处于编辑状态的GridView数据行
当然也可以使用事件和模板来自定义GridView控件的编辑或删除功能,这里不再详细描述,在具体应用中,可视情况选择使用。
10.3.6分页显示数据和数据排序
如果显示数据太多,GridView控件可以分页进行显示,与这个功能相关的属性有:AllowPaging属性:获取或设置一个值,该值指示是否启动分页。
PageCount属性:获取在GridView控件中显示数据源记录所需的页数。PageIndex属性:获取或设置当前显示页的索引。
PageSize属性:获取或设置GridView控件在每页上所显示的记录的数目。
要想在GridView中实现分页,可以将AllowPaging属性设置为True,再设置PageSize为一个值,便设定了在每页上所显示的记录行数。若要根据GridView的某一列对数据进行排序,则将AllowSorting属性设置为True,便可进行排序。
33、34、textBox1.Text被赋值为12,textBox2.Text被赋值为45,label1.Text=textBox1.Text+textBox2.Text;得到是字符串还是数值。35、i+=j;的等效语句是i=j+j吗?36、Main函数是唯一允许的全局函数37、C#中一条语句必须写在一行内;
抛出异常
抛出异常有两种方式。如果是系统自动生成异常类对象,则不需要编写任何代码。如,在进行整数除法运行时,当分母为零时,就会自动产生一个System.DivideByZeroException类的对象。如果是强制抛出,则使用throw语句来实现,throw语句用于立即无条件地引发异常,控制永远不会执行紧跟在throw后面的语句。
Throw语句的形式:Throw[异常对象];
下面给出使用throw语句如何强制抛出异常,如例5-11所示。例5-11
usingSystem;
publicclassThrowTest{
staticvoidMain(){
strings;
Console.WriteLine("请输入字符串:");s=Console.ReadLine();if(s=="C#"){
thrownewArgumentNullException();}
Console.Write("Thestringsisnull");//不会执行
}}运行结果:
在例5-11中,当输入字符串“C#”后,赋值给s。这本来是正确的输入,然而由于强制抛出“参数为空”的异常,因此输出上面的结果。而throw后面的Console.Write("Thestringsisnull")语句不会得到执行。
捕获处理异常
异常处理由try语句处理,try语句提供了一种机制来捕捉块执行过程中发生的异常,它有三中形式:
try-catch:可有一个或多个catch块语句的try块语句。try-finally:跟有一个finally块语句的try块语句。
try-catch-finally:跟有一个或多个catch块语句和一个finally语句的try块语句。catch用于处理语句块中出现的异常,catch的格式是:catch(class-type标识符)
catch语句的参数是一个类类型,此类必须是System.Exception或者是它的派生类的类型。当一个catch语句同时指定了类类型和标识符时,就声明了一个同名同类型的异常变量。异常变量相当于一个只读的局部变量,它的有效区间是catch块语句内部。在catch块语句执行过程中,异常变量代表当前正被处理的异常。异常对象中有很多重要的错误信息,若想引用异常对象,就必须定义异常变量。
下面分别介绍try语句的三种形式。1、try-catch
try-catch语句是可有一个或多个catch块语句的try块语句,一般格式如下:try
{;//可能引发异常的语句}catch(异常对象声明1)
{;//异常处理,异常信息等};
catch(异常对象声明n)
{;//异常处理,异常信息等}
在同一个try-catch语句中可以有多个catch子句,如果某一catch语句指定的类型和它之前的catch语句指定的类型一致或者由此类型派生而来,会发生错误,因此寻找异常的处理是按照catch子句出现的顺序逐一检查。在catch语句中,异常对象声明是可选的,如果catch子句使用时不带任何参数,它可以捕捉任何类型的异常,这样的catch语句称为通用catch语句,等同于catch(System.Exception)。Try语句中只能存在一条通用catch语句,而且必须是try语句的最后一条catch语句。
下面给出实例:例5-12,来介绍try-catch语句的使用。例5-12
usingSystem;
publicclasstrycatchTest{
staticvoidMain(){
try{
intx,y,z;
Console.WriteLine("请输入两个数据分别赋值给x和y:");x=int.Parse(Console.ReadLine());y=int.Parse(Console.ReadLine());z=x/y;
Console.WriteLine("z={0}",z);}
catch(FormatExceptionae){
Console.WriteLine(ae.ToString());}
catch(DivideByZeroExceptionbe){
Console.WriteLine(be.ToString());}
catch(Exceptionce){
Console.WriteLine(ce.ToString());}}}
运行结果:
上面的结果是,首先输入数字10,然后回车输入5,得到正确的运算结果。
如果,在输入x和y值时,输入10后,按空格再输入5,则引发FormatException异常,出现下面的提示:
如果首先输入数字时,然后回车输入数字0,引发了DivideByZeroException异常,如下所示:
若将上例中的第二个catch语句和第三个交换位置,编译时会出现如下错误。
2、try-finally
Finally块用于清除在try块中分配的任何资源。无论是程序正常执行或是执行了break,continue或goto语句,还是把异常处理传递到try块语句之外,都必须执行finally块中的语句。Finally块语句中不允许出现return语句。
这种语句的形式如下:try{;//可能引发异常的语句}finally
{;//包含异常处理程序和清理代码}
若将上面例5-12中的catch块语句全部去掉,然后在try块语句下面输入如下语句:finally{
Console.WriteLine("thankyou!");
}运行程序,输入数字10,然后回车输入0,会输出如下结果:
从结果中可见,运行后引发了DivideByZeroException异常,尽管捕捉了异常,仍然会执行包含在finally块中的输出语句,即Console.WriteLine("thankyou!")语句。
3、try-catch-finally
try-catch-finally语句可以看成是try-catch和try-finally语句的组合,格式如下:try
{;//可能引发异常的语句}catch(异常对象声明1)
{;//异常处理,异常信息等};
catch(异常对象声明n)
{;//异常处理,异常信息等}finally
{;//包含异常处理程序和清理代码}
try-catch-finally语句的通常用法是在try块中获取并使用资源,在catch块中处理异常情况,在finally块中释放资源。
下面,在例5-12中,在catch块语句后加入如下语句:finally{
Console.WriteLine("thankyou!");}
运行程序,输入数字10,然后回车输入0,会输出如下结果:
从结果中可以看到,在catch块语句中处理了引发的DivideByZeroException异常,并且执行了finally块中的输出语句。除了使用预定义的异常类型外,用户还可以自定义异常类,以满足自己的具体需要。用户自定义异常类,一般从ApplicationException类派生,因为该类由用户程序引发,而不是公共语言运行库引发。
友情提示:本文中关于《基于.NET的Web程序设计知识点总结》给出的范例仅供您参考拓展思维使用,基于.NET的Web程序设计知识点总结:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。