基于.NET的Web程序設(shè)計(jì)知識(shí)點(diǎn)總結(jié)
1.網(wǎng)站中的Global.asax文件(如果有的話)必須放在應(yīng)用程序的根目錄下(T)2.利用DetailsView控件添加記錄特別方便,因?yàn)椴恍枰硗庠黾虞斎肟颍═)3.ADO.NET只是ADO的簡(jiǎn)單升級(jí)(F)
4.數(shù)據(jù)集(DataSet)能夠在斷開與數(shù)據(jù)源連接的情況下工作(T)5.ASP.NET采用的是代碼分離模式(T)
6.離開了網(wǎng)站,aspx頁(yè)面可以單獨(dú)運(yùn)行(F)
7.離開了IIS服務(wù)器,.htm頁(yè)面可以單獨(dú)運(yùn)行(T)8.在DetailsView中不能顯示符合條件的多條記錄(F)
9.Web服務(wù)器控件的幾個(gè)按鈕都可以起到向服務(wù)器提交數(shù)據(jù)的作用(T)10.XML是一種編程語(yǔ)言(F)
1.服務(wù)器控件的AutoPostBack屬性的含義是選擇服務(wù)器控件時(shí),是否自動(dòng)回送。
。2.要求在某文本框中輸入密碼,一般要將該TextBox控件的TextMode屬性設(shè)置為
Password。
3.Page對(duì)象的IsPostBack屬性的含義是指示該頁(yè)是否正為響應(yīng)客戶端回發(fā)而加載,或者是否正被首次加載和訪問。如果是響應(yīng)客戶端回發(fā)而加載,其值為True,否則為False。
4.Response對(duì)象在使用時(shí)是通過使用Page對(duì)象的Response屬性而達(dá)到的。5.ASP.NET中的頁(yè)面跳轉(zhuǎn)可以通過Response對(duì)象的Redirect方法實(shí)現(xiàn)。
6.ASP.NET中存儲(chǔ)頁(yè)面間共享的變量可以通過Session對(duì)象或Application對(duì)象實(shí)現(xiàn)。7.存儲(chǔ)過程的英文原詞為StoredProcedure。
8.ADO.NET包含的5大對(duì)象為Connection,Command,DataReader,
DataAdapter,DataSet。
9.使用SqlConnection對(duì)象連接到本地的數(shù)據(jù)庫(kù)服務(wù)器上的Northwind數(shù)據(jù)庫(kù)時(shí),如果使用集成
Windows的身份驗(yàn)證模式,則連接字符串的寫法為:
SqlConnection
conn=new
SqlConnection("Data
Source=.;Initial
Catalog=Northwind;Integrated
Security=True");。
10.下面是設(shè)置和取出Session對(duì)象的代碼。
設(shè)置Session的代碼是:
Session[“greeting”]=”hellowang!”;
取出該Session的對(duì)象的語(yǔ)句如下:
Stringgreeting=Session["greeting"].ToString();
11.App_Data目錄用來放置()
A.共享的數(shù)據(jù)庫(kù)文件B.共享文件C.被保護(hù)的文件D.代碼文件12.文件系統(tǒng)網(wǎng)站非常適合學(xué)習(xí)使用,因?yàn)椋ǎ〢.不需要安裝IISB.網(wǎng)站允許放置在任意目錄下C.能夠進(jìn)行單獨(dú)測(cè)試D.A+B13.下面哪種后綴是靜態(tài)網(wǎng)頁(yè)文件()A.a(chǎn)spB.aspxC.htmD.jsp
14.在配置GridView控件的SqlDataSource數(shù)據(jù)源控件過程中,單擊【高級(jí)】按鈕的目的是()A.打開其他窗口B.輸入新參數(shù)C.生成SQL編輯語(yǔ)句D.優(yōu)化代碼15.SiteMapDataSource能否用來訪問()A.關(guān)系型數(shù)據(jù)B.層次性數(shù)據(jù)C.字符串?dāng)?shù)據(jù)D.數(shù)值型數(shù)據(jù)1.ASP.NET中服務(wù)器端控件的AutoPostBack屬性的意義。(答案見P87)
2.ASP.NET中頁(yè)面跳轉(zhuǎn)的方式有幾種,并簡(jiǎn)述各自的特點(diǎn)。(答案見P137~139)3.在網(wǎng)站中使用母版頁(yè)的好處是什么,根據(jù)你的學(xué)習(xí)經(jīng)歷描述使用母版頁(yè)的一般過程。(答案見P228)
擴(kuò)展閱讀:Net程序設(shè)計(jì)知識(shí)點(diǎn)
.Net程序設(shè)計(jì)
教材:
《VisualC#.NET實(shí)用教程》,清華大學(xué)出版社參考書:
課程學(xué)習(xí)的目的:
1學(xué)習(xí)并掌握.NET技術(shù)、C#的編程方法和面向?qū)ο笏枷耄?/p>
2.學(xué)習(xí)并掌握ADO.NET技術(shù)及Windows數(shù)據(jù)庫(kù)應(yīng)用程序的開發(fā);3.學(xué)習(xí)并掌握ASP.NET技術(shù)及Web應(yīng)用程序的開發(fā);4.學(xué)習(xí)并掌握網(wǎng)絡(luò)編程的知識(shí)
前期課程基礎(chǔ):
數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)
授課學(xué)時(shí)與分配:總學(xué)時(shí)40學(xué)時(shí)
1.緒論(2學(xué)時(shí))2.C#的編程基礎(chǔ)(2學(xué)時(shí))3.面向?qū)ο缶幊蹋?學(xué)時(shí))4.Windows應(yīng)用程序(4學(xué)時(shí))5.ADO.NET技術(shù)(2學(xué)時(shí))6.Windows數(shù)據(jù)庫(kù)應(yīng)用程序的開發(fā)(4學(xué)時(shí))7.ASP.NET技術(shù)(4學(xué)時(shí))8.Web應(yīng)用程序的開發(fā)(3學(xué)時(shí))9.網(wǎng)絡(luò)編程基礎(chǔ)(4學(xué)時(shí))10.網(wǎng)絡(luò)編程技術(shù)(6學(xué)時(shí))11.總結(jié)考試(2學(xué)時(shí))
授課時(shí)間、地點(diǎn):
時(shí)間為每周一上午8:0012:10;地點(diǎn)為12教學(xué)樓A408,B304。第1講.NET綜述
1.1.NET介紹
1.2.NET核心成分簡(jiǎn)介
1.2.1公共語(yǔ)言運(yùn)行庫(kù)
1.2.2.NETFramework類庫(kù)1.2.3中間語(yǔ)言和程序集1.2.4公共語(yǔ)言規(guī)范1.2.5通用類型系統(tǒng)1.3開發(fā)工具及C#語(yǔ)言
1.3.1開發(fā)工具介紹1.3.2C#語(yǔ)言簡(jiǎn)介
1.4基于.NET的應(yīng)用程序
1.4.1SDK和IDE
1.4.2基于.NET的應(yīng)用程序1.5C#程序設(shè)計(jì)初步
1.5.1在SDK上開發(fā)控制臺(tái)程序
1.5.2在IDE上開發(fā)Windows應(yīng)用程序1.5.3在IDE上開發(fā)Web應(yīng)用程序
第2講C#類型和語(yǔ)句成分
2.1關(guān)鍵字、標(biāo)識(shí)符和注釋
2.1.1關(guān)鍵字
2.1.2標(biāo)識(shí)符及其命名2.1.3注釋2.2C#類型基礎(chǔ)
2.2.1類型分類
2.2.2C#語(yǔ)言的類型系統(tǒng)2.2.3變量
2.2.4常量和文字2.3值類型
2.3.1簡(jiǎn)單類型2.3.2枚舉類型2.4數(shù)組類型
2.4.1一維數(shù)組2.4.2多維數(shù)組2.4.3交錯(cuò)數(shù)組2.4.4Array類簡(jiǎn)介2.4.5foreach語(yǔ)句2.5字符串常量
2.5.1創(chuàng)建字符串
2.5.2String字符串的比較2.6結(jié)構(gòu)
2.6.1結(jié)構(gòu)的聲明
2.6.2結(jié)構(gòu)的實(shí)例化及應(yīng)用2.7運(yùn)算符和表達(dá)式
2.7.1算術(shù)運(yùn)算符2.7.2關(guān)系運(yùn)算符2.7.3邏輯運(yùn)算符2.7.4位運(yùn)算符2.7.5賦值運(yùn)算符2.7.6條件運(yùn)算符
2.7.7運(yùn)行符的優(yōu)先級(jí)及結(jié)合性2.8數(shù)據(jù)類型轉(zhuǎn)換
2.8.1隱式類型轉(zhuǎn)換2.8.2顯示轉(zhuǎn)換
第3講C#語(yǔ)句
3.1簡(jiǎn)單語(yǔ)句
3.1.1表達(dá)式語(yǔ)句3.1.2空語(yǔ)句3.1.3復(fù)合語(yǔ)句3.1.4聲明語(yǔ)句3.2選擇語(yǔ)句
3.2.1條件運(yùn)算符3.2.2if語(yǔ)句3.2.3switch語(yǔ)句3.3循環(huán)語(yǔ)句
3.3.1while循環(huán)3.3.2do_while循環(huán)3.3.3for循環(huán)3.4跳轉(zhuǎn)語(yǔ)句
3.4.1break語(yǔ)句3.4.2continue語(yǔ)句3.4.3goto語(yǔ)句3.4.4return語(yǔ)句3.5命名空間
3.5.1命名空間聲明
3.5.2using命名空間指令3.5.3using別名指令
第4講面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)-類、對(duì)象、方法
4.1面向?qū)ο蟪绦蛟O(shè)計(jì)概述4.2類和對(duì)象
4.2.1類的聲明4.2.2類的成員4.2.3對(duì)象的聲明4.3構(gòu)造函數(shù)
4.3.1默認(rèn)構(gòu)造函數(shù)4.3.2構(gòu)造函數(shù)的重載4.4析構(gòu)函數(shù)4.5方法
4.5.1方法的聲明及調(diào)用4.5.2方法中的參數(shù)傳遞4.5.3實(shí)例方法和靜態(tài)方法4.5.4方法重載4.6運(yùn)算符重載4.7屬性和索引器
4.7.1屬性的聲明和使用4.7.2索引器的聲明和使用4.7.3屬性和索引器的比較
第5講面向?qū)ο蟪绦蛟O(shè)計(jì)-繼承、多態(tài)
5.1類的繼承
5.1.1基類與派生類
5.1.2成員的繼承、添加和隱藏5.1.3base關(guān)鍵字5.2抽象類與封閉類
5.2.1抽象方法、屬性、索引器5.2.2抽象類5.2.3密封類5.3多態(tài)
5.3.1虛成員5.3.2重寫
5.3.3編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)
第6講面向?qū)ο蟪绦蛟O(shè)計(jì)-接口、委托
1接口
.1接口的定義.2接口的實(shí)現(xiàn)2委托和事件
1委托2事件3異常處理
1異常類
2異常處理步驟3拋出異常4捕獲處理異常
第7講Windows應(yīng)用程序
7.1Windows應(yīng)用程序開發(fā)步驟
7.1.1創(chuàng)建窗體
7.1.2添加控件及控件布局7.1.3響應(yīng)事件7.2Windows常用控件
7.2.1文本類控件7.2.2按鈕類控件7.2.3對(duì)話框類控件
7.2.4列表框、視圖類控件7.2.5滾動(dòng)類控件
7.2.6工具欄和狀態(tài)欄控件7.2.7定時(shí)器控件7.2.8菜單控件
7.3多文檔界面(MDI)
7.3.1創(chuàng)建MDI父窗體7.3.2創(chuàng)建MDI子窗體
7.3.3確定活動(dòng)的MDI子窗體7.3.4排列子窗體7.4實(shí)例解析
第7講ADO.NET數(shù)據(jù)庫(kù)訪問技術(shù)
8.1ADO.NET概述8.2ADO.NET體系結(jié)構(gòu)
8.2.1ADO.NET的總體結(jié)構(gòu)8.2.2DataSet結(jié)構(gòu)
8.2.3.NETFramwork數(shù)據(jù)提供程序
8.2.4ADO.NET開發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的一般步驟8.3數(shù)據(jù)庫(kù)的連接
8.3.1Connection連接字符串8.3.2創(chuàng)建并使用連接對(duì)象8.4Command對(duì)象的使用
8.4.1創(chuàng)建Command對(duì)象8.4.2執(zhí)行命令8.4.3參數(shù)化查詢8.4.4執(zhí)行存儲(chǔ)過程8.5DataReader對(duì)象的使用
8.5.1創(chuàng)建DataReader對(duì)象8.5.2使用DataReader讀取數(shù)據(jù)8.6DataSet和DataAdapter的使用
8.6.1DataSet對(duì)象管理數(shù)據(jù)8.6.2使用DataAdapter對(duì)象
第9講Windows數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)
9.1數(shù)據(jù)綁定
9.1.1簡(jiǎn)單數(shù)據(jù)綁定9.1.2復(fù)雜數(shù)據(jù)綁定9.2數(shù)據(jù)源的類型9.2.1數(shù)組數(shù)據(jù)源9.2.2數(shù)據(jù)表數(shù)據(jù)源9.2.3數(shù)據(jù)集數(shù)據(jù)源
9.3Windows數(shù)據(jù)庫(kù)應(yīng)用實(shí)例
9.3.1數(shù)據(jù)庫(kù)的創(chuàng)建及連接9.3.2主要界面及相關(guān)代碼
第10講ASP.NET技術(shù)
10.1ASP.NET簡(jiǎn)介
10.1.1ASP.NET的特點(diǎn)
10.1.2ASP.NET代碼分離技術(shù)10.1.3Web窗體10.2ASP.NET控件
10.2.1HTML服務(wù)器控件10.2.2Web服務(wù)器控件10.2.3驗(yàn)證控件10.3ASP.NET內(nèi)置對(duì)象
10.3.1Response對(duì)象10.3.2Request對(duì)象10.3.3Server對(duì)象10.3.4Session對(duì)象10.3.5Application對(duì)象
第11講Web應(yīng)用程序開發(fā)基礎(chǔ)
11.1Web數(shù)據(jù)綁定技術(shù)11.2列表類數(shù)據(jù)綁定控件
11.2.1列表控件概述
11.2.2列表類控件數(shù)據(jù)綁定舉例11.3GridView控件
11.3.1GridView控件概述
11.3.2常用屬性、方法和事件11.3.3GridView中的字段類型11.3.4GridView數(shù)據(jù)顯示11.3.5編輯和刪除數(shù)據(jù)
11.3.6分頁(yè)顯示數(shù)據(jù)和數(shù)據(jù)排序11.4Global.asax文件11.5Web.config文件
11.5.1配置與調(diào)用數(shù)據(jù)庫(kù)鏈接字符串11.5.2配置文件Web.config
第12講網(wǎng)上選課系統(tǒng)的開發(fā)12.1需求分析12.2數(shù)據(jù)庫(kù)設(shè)計(jì)
12.2.1數(shù)據(jù)庫(kù)表12.2.2存儲(chǔ)過程12.3系統(tǒng)設(shè)計(jì)12.4數(shù)據(jù)庫(kù)連接
12.4.1Web.Config的配置12.4.2調(diào)用連接字符串12.5系統(tǒng)實(shí)現(xiàn)
12.5.1登錄界面(Login/Login.aspx)
12.5.2選課界面(student/selectcourse.aspx)12.5.3提交界面(student/tijiao.aspx)
12.5.4學(xué)生管理界面(manager/StudentList)
12.5.5選課管理界面(manager/XuanKeList.aspx)
以上為考試范圍
第13講多線程和同步
13.1基本概念
13.1.1多線程概念
13.1.2C#中線程實(shí)現(xiàn)方法13.2Thread類
13.2.1Thread類介紹
13.2.2線程的狀態(tài)和生命周期13.2.3線程的優(yōu)先級(jí)13.3多線程編程
13.3.1編程步驟13.3.2編程實(shí)例13.4線程同步和互斥
13.4.1多個(gè)線程同時(shí)修改共享數(shù)據(jù)可能發(fā)生的錯(cuò)誤13.4.2用Lock語(yǔ)句實(shí)現(xiàn)互斥13.4.3用Mutex類實(shí)現(xiàn)互斥13.4.4用Monitor類實(shí)現(xiàn)互斥13.5實(shí)例解析
第14講網(wǎng)絡(luò)協(xié)議與套接字編程
14.1TCP/IP網(wǎng)絡(luò)協(xié)議
14.1.1TCP/IP參考模型14.1.2網(wǎng)間協(xié)議IP
14.1.3傳輸控制協(xié)議TCP14.1.4C#中相關(guān)的類14.2套接字編程技術(shù)
14.2.1IP地址和端口14.2.2套接字14.2.3面向連接的套接字14.2.4無(wú)連接的套接字14.3套接字編程實(shí)例1、.Net包括哪些內(nèi)容?
主要介紹.NET的兩個(gè)重要實(shí)體:公共語(yǔ)言運(yùn)行庫(kù)(CommonLanguageRuntime,CLR)和.NETFramework類庫(kù)(FrameworkClassLibrary,F(xiàn)CL),以及其它核心成分。
2、什么是.NetFramework?
.NET平臺(tái)又稱.NET框架(.NETFramework),是.NET的核心組成部分,提供了一個(gè)多語(yǔ)言組件開發(fā)和執(zhí)行的環(huán)境一個(gè)完全可操控的安全的和特性豐富的應(yīng)用開發(fā)執(zhí)行環(huán)境,這不但使得應(yīng)用程序的開發(fā)和發(fā)布更加簡(jiǎn)單,并且實(shí)現(xiàn)了眾多種類語(yǔ)言間的無(wú)縫集成。
3、公共語(yǔ)言運(yùn)行庫(kù)
公共語(yǔ)言運(yùn)行庫(kù)(CommonLanguageRuntime,CLR)又稱為公共語(yǔ)言運(yùn)行時(shí)或公共語(yǔ)言運(yùn)行環(huán)境,是.NET系統(tǒng)構(gòu)架中核心的部分,負(fù)責(zé)執(zhí)行代碼、管理內(nèi)存、提供安全性等核心功能。它是構(gòu)成.NET框架的兩個(gè)實(shí)體中的一個(gè)。
CLR和Java虛擬機(jī)一樣是一個(gè)運(yùn)行時(shí)環(huán)境,其主要功能包括:
執(zhí)行和管理:完成運(yùn)行過程中的代碼加載、應(yīng)用程序和托管對(duì)象的內(nèi)存管理、對(duì)
象自動(dòng)布局、使用JIT(JustInTime)編譯器將MSIL(Microsoftintermediatelanguage)編譯成本地代碼并且控制代碼執(zhí)行、處理異常等全部步驟。
提供安全保證:類型安全、代碼訪問安全、控制托管和非托管代碼的互操作。對(duì)開發(fā)者的支持:提供界面信息,幫助調(diào)試等。
4、代碼執(zhí)行過程
在.NET中,將代碼分為托管代碼(managedcode)和非托管代碼(unmanagedcode)兩種
C#.NET源程序VB.NET源程序
CLS:公共語(yǔ)言運(yùn)行規(guī)范C#編譯器VB.NET編譯器MSIL:Microsoft中間語(yǔ)言CLR:公共語(yǔ)言運(yùn)行庫(kù)(JIT:justintime編譯器)
本地代碼
代碼執(zhí)行流程
5、開發(fā).NET的應(yīng)用程序使用兩種環(huán)境SDK和IDE,二者區(qū)別與聯(lián)系SDK和IDE分別是Microsoft的softwaredevelopmentkit(軟件開發(fā)工具包)和integrateddevelopmentenvironment(集成開發(fā)環(huán)境)的縮寫。
采用SDK開發(fā),首先使用文本編輯器編寫代碼,然后用命令行編譯和執(zhí)行。開發(fā)控制臺(tái)程序通常使用SDK環(huán)境。
IDE是可視化的開發(fā)環(huán)境,所謂可視化編程,是一種自動(dòng)或半自動(dòng)的編程方法。在編程過程中,程序員利用系統(tǒng)提供的圖形元素,組合成所需要的界面或組合成能夠體現(xiàn)程序邏輯的流程,系統(tǒng)就能自動(dòng)地產(chǎn)生部分代碼或全部代碼。在IDE中,程序員可以利用系統(tǒng)中提供的圖形元素組合成界面,開發(fā)Windows窗體應(yīng)用程序和Web應(yīng)用程序。
6、IDE上直接支持的應(yīng)用程序的主要類型有哪些?
1、Windows應(yīng)用程序
Windows應(yīng)用程序是基于Windows窗體(WindowsForms)的應(yīng)用程序,是一種基于圖形界面接口GUI的應(yīng)用程序,一般是在用戶計(jì)算機(jī)本地運(yùn)行。
2、Windows控件庫(kù)
可以創(chuàng)建Windows窗體應(yīng)用程序的自定義控件,以方便用戶的使用。3、ASP.NETWeb應(yīng)用程序
ASP.NET是.NET中統(tǒng)一的Web開發(fā)平臺(tái),可以用來開發(fā)企業(yè)級(jí)的Web應(yīng)用程序。ASP.NET使程序員能夠像設(shè)計(jì)Windows窗體應(yīng)用程序一樣設(shè)計(jì)Web應(yīng)用程序,并且采用代碼分離技術(shù),使代碼與HTML文檔分離,方便代碼重用,還具有服務(wù)器控件的開發(fā)能力,能夠在IDE中進(jìn)行可視化的開發(fā)。
4、ASP.NETWebService
WebService是Microsoft的.NET戰(zhàn)略中的重點(diǎn),由于XML(extensiblemarkuplanguage)是當(dāng)今Internet和各類系統(tǒng)之間數(shù)據(jù)交換的標(biāo)準(zhǔn),所以也稱為XMLWebServices,它可以實(shí)現(xiàn)客戶端服務(wù)器或服務(wù)器客戶端之間的數(shù)據(jù)交換。
XMLWebServices采用松耦合的分布式結(jié)構(gòu),不與特定的組件技術(shù)或?qū)ο笳{(diào)用約定相關(guān)聯(lián),也與編程語(yǔ)言、組件模型、操作系統(tǒng)等無(wú)關(guān)。一般的Web程序,如瀏覽器,是人與程序的對(duì)話,而WebService是程序與程序的對(duì)話。WebService是公認(rèn)的Internet下一個(gè)最大的浪潮,也是Internet應(yīng)用中最有影響的服務(wù)。
5、智能設(shè)備應(yīng)用程序
Internet不僅可以連接PC機(jī)、服務(wù)器等計(jì)算機(jī)設(shè)備,也可以連入電視機(jī)、電冰箱、打印機(jī)等家用的或辦公的電器,可以通過Internet進(jìn)行遠(yuǎn)程控制,智能設(shè)備應(yīng)用程序就是連接、控制這些設(shè)備,并互相通信的應(yīng)用程序。
6、ASP.NET移動(dòng)Web應(yīng)用程序
此類應(yīng)用程序應(yīng)用于能無(wú)線上網(wǎng)的移動(dòng)數(shù)字設(shè)備,常見的移動(dòng)設(shè)備有移動(dòng)電話、PDA、筆記本電腦等。.NET提供移動(dòng)控件來連接移動(dòng)設(shè)備的設(shè)備適配器,在.NET上開發(fā)移動(dòng)Web應(yīng)用程序的過程和開發(fā)其它Web應(yīng)用程序類似。
7、C#語(yǔ)言支持的兩種基本數(shù)據(jù)類型
值類型和引用類型。理解這兩種類型的區(qū)別是理解C#語(yǔ)言各種類型及其用法的基礎(chǔ)。值類型:值類型變量存放在棧里,所以直接包含有它們的數(shù)據(jù),每個(gè)值類型變量
都有它自己的副本,因此對(duì)一個(gè)變量的操作不會(huì)影響到另一個(gè)變量。
引用類型:引用類型的存儲(chǔ)分為兩部分,引用類型中對(duì)數(shù)據(jù)的引用存放在棧里面,
而引用類型的數(shù)據(jù)存放在堆里面。所以引用類型變量的名不包含它的數(shù)據(jù),而是只包含對(duì)它的數(shù)據(jù)的引用。引用類型變量的數(shù)據(jù)存儲(chǔ)在一個(gè)實(shí)例中,不同的變量可以引用同一個(gè)對(duì)象的實(shí)例,因此在對(duì)一個(gè)引用變量操作時(shí),改變實(shí)例值時(shí)將會(huì)影響其他引用這個(gè)實(shí)例的引用變量,在編程中要格外注意。8、C#語(yǔ)言提供了兩種實(shí)現(xiàn)繼承的方式:類的繼承和接口繼承。他們的區(qū)別與聯(lián)系.通常把作為基礎(chǔ)、被繼承的類稱為基類,繼承別的類的子類稱為派生類。一個(gè)類從另一個(gè)類派生出來時(shí),派生類從基類那里繼承特性。派生類也可以作為其它類的基類。C#中,派生類只能從一個(gè)類中繼承,不支持多繼承的機(jī)制。如果必須使用多重繼承,可以使用接口繼承來實(shí)現(xiàn)。
9C#的關(guān)鍵字abstractchardofinallyinnewsizeoftrueusingnewabstractsealedpublicprotectedinternalprivate只允許用在嵌套類中,表明隱藏了從基類繼承而來、與基類中同名的成員說明該類是一個(gè)抽象類,該類含有抽象成員,因此不能被實(shí)例化,只能用來做其他類的基類,而不能產(chǎn)生對(duì)象說明該類是一個(gè)密封類,不能做其他類的基類,不能再派生新的類表示外界可以不受限制的訪問該類。類的訪問權(quán)限省略時(shí)默認(rèn)為public該類只能被這個(gè)類的成員或類派生成員訪問表示該類能由程序集中的所有文件使用,而不能由程序集之外的對(duì)象使用表示該類只能被這個(gè)類的成員訪問ascheckeddoublefixedintnullstackalloctryvirtualbaseclasselsefloatinterfaceobjectreadonlystatictypeofvolatileboolconstenumforinternalrefstringuintvoidbreakcontinueeventforeachisreturnstructulongwhilebytedecimalexplicitgotolockoverridesbyteswitchuncheckedcasedefaultexterniflongparamssealedthisunsafecatchdelegatefalseimplicitnamespaceprivateshortthrowushortoperatoroutprotectedpublic
10、C#的基本數(shù)據(jù)類型
值類型簡(jiǎn)單類型用戶自定義類型枚舉類型接口用戶自定義類型指針類型類型引用類型類類型數(shù)組委托字符串用戶自定義類型接口指針類型
圖2.1C#的類型值類型包括三種:簡(jiǎn)單類型、枚舉類型和自定義類型(這里指結(jié)構(gòu))。將在2.3小節(jié)介紹前兩種值類型,在第5章介紹結(jié)構(gòu)類型。
引用類型包括類(class)、接口(interface)、委托(delegate)、數(shù)組(array)、字符串(String)和Object以及不提倡使用的指針類型。習(xí)慣將引用類型的變量稱為對(duì)象,而值類型的變量仍然稱為變量。引用類型和值類型的最大區(qū)別是引用類型的數(shù)據(jù)存儲(chǔ)在堆中,而在棧中存儲(chǔ)它的數(shù)據(jù)的引用。
位運(yùn)算符“>1);輸出結(jié)果是:
有符號(hào)數(shù)右移1位:-128無(wú)符號(hào)數(shù)右移1位:128
知識(shí)點(diǎn)匯總
1、什么是面向?qū)ο蟪绦蛟O(shè)計(jì)?
2、什么是類?類的多態(tài)、封裝、繼承作用是什么?
類的成員由兩部分組成,一部分是類體中以類成員聲明形式引入的類成員,另一部分是直接從它的基類繼承而來的成員。類的成員主要包括數(shù)據(jù)成員和方法成員,類是完成對(duì)它們封裝的結(jié)構(gòu)類型。類的數(shù)據(jù)成員可以是常量、字段和對(duì)象等。方法成員包含方法、屬性、索引器、事件、操作符、構(gòu)造函數(shù)、析構(gòu)函數(shù)等。當(dāng)字段、方法、屬性、事件、運(yùn)算符和構(gòu)造函數(shù)聲明中含有static修飾符時(shí),則表明它們是靜態(tài)成員,否則就是實(shí)例成員。靜態(tài)成員屬于類,而實(shí)例成員屬于對(duì)象。
類成員聲明時(shí),可以使用以下5種訪問修飾符中的一種:public、protected、internal、private、protectedinternal。當(dāng)類成員聲明中不包含訪問修飾符時(shí),默認(rèn)訪問修飾符為private。
多態(tài)就是指一個(gè)成員在不同的上下文中表現(xiàn)出不同的功能。多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)中重要概念和常見技術(shù),也是一種代碼重用技術(shù)。虛成員和虛成員的重寫是多態(tài)技術(shù)的基礎(chǔ)。
根據(jù)C#是在編譯時(shí)還是在運(yùn)行時(shí)確定得調(diào)用不同類對(duì)象的哪個(gè)同名成員,將多態(tài)分為如下兩種:編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。
編譯時(shí)多態(tài)是指在編譯時(shí)就能確定調(diào)用什么對(duì)象中的成員,也稱為早綁定。隱藏、重載都屬于早期綁定,即編譯時(shí)多態(tài)。運(yùn)行時(shí)多態(tài)是指只有當(dāng)運(yùn)行時(shí)才能確定調(diào)用哪個(gè)對(duì)象中的成員,又稱為晚綁定。虛方法、重寫是晚綁定,即運(yùn)行時(shí)多態(tài)。一般所說的多態(tài)性均為運(yùn)行時(shí)多態(tài)。
3、構(gòu)造方法(構(gòu)造函數(shù))
構(gòu)造函數(shù)的重載是常見的現(xiàn)象,同一個(gè)類中有多個(gè)構(gòu)造函數(shù),區(qū)別他們的依據(jù)是參數(shù)列表,同一個(gè)類中任意兩個(gè)構(gòu)造函數(shù)的參數(shù)列表必須不同,參數(shù)列表只要具備下列條件之一,就可以認(rèn)為是不同的參數(shù)列表,進(jìn)而可以認(rèn)為是兩個(gè)重載的構(gòu)造函數(shù):
1)參數(shù)列表中參數(shù)個(gè)數(shù)不同;
2)參數(shù)列表中參數(shù)個(gè)數(shù)相同,但參數(shù)類型不同;
3)參數(shù)列表中參數(shù)個(gè)數(shù)相同,參數(shù)類型種類也相同,但排列的次序不同。
4、屬性
屬性由兩部分組成:屬性頭和存取器。存取器分為get訪問器和set訪問器。下面給出屬性的聲明。
語(yǔ)法形式:
[修飾符]類型說明符屬性名{
訪問聲明}
其中:修飾符new,public,protected,internal,private,static,virtual,override和abstract9種。
訪問聲明用來聲明屬性訪問器。給屬性賦值時(shí)使用set訪問器,獲取屬性值時(shí)使用get訪問器。在訪問聲明中,如果只有g(shù)et訪問器,表示是只讀屬性;如果只有set訪問器,表示只寫屬性;兩個(gè)都有,表示讀寫屬性。
set訪問器是一個(gè)帶有簡(jiǎn)單值類型參數(shù)的方法,用于處理類外部的寫入值。set訪問器帶有一個(gè)特殊的關(guān)鍵字value,value就是set訪問器的隱式參數(shù),在set中通過value將外部的輸入傳遞進(jìn)來,然后賦值給類中的某個(gè)變量成員。get訪問器是一個(gè)不帶參數(shù)的方法,它用于向外部返回屬性成員的值。通常訪問函數(shù)的語(yǔ)句或語(yǔ)句塊主要由return或throw語(yǔ)句返回某個(gè)變量成員的值。為了實(shí)現(xiàn)良好的數(shù)據(jù)封裝和數(shù)據(jù)隱藏,類的字段成員的訪問屬性一般設(shè)置為private或protected,這樣在類的外部就不能直接讀/寫這些字段了,通常的辦法是提供public級(jí)的方法來訪問私有的或保護(hù)的字段。為了實(shí)現(xiàn)對(duì)數(shù)據(jù)成員更好地封裝和保護(hù),同時(shí)又向外界提供更有效的訪問形式,C#采用屬性來實(shí)現(xiàn)這種目標(biāo)。屬性是一種特殊的成分,它具有方法的本質(zhì),又具有字段的形式,即屬性的定義類似于方法的定義,屬性的使用類似于字段的使用。屬性完善了C#的封裝功能,使得所有的數(shù)據(jù)成員都可以成為私有成員,從而更好地體現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝性。
5、索引器
索引器允許按照與數(shù)組相同的方式對(duì)類、結(jié)構(gòu)或接口進(jìn)行索引。索引器類似于屬性,不同之處在于它們的訪問器采用參數(shù)。下面給出索引器的聲明。語(yǔ)法形式:
[修飾符]索引器聲明符{
訪問器聲明}其中:
修飾符可以是new、virtual、sealed、override、abstract、extern以及public、protected、internal、private四個(gè)訪問修飾符的有效組合。注意,索引器修飾符不可以是static的。
索引器聲明符的形式有兩種,分別是:類型this[形參表]或
類型接口類型this[形參表]
注意此處“[]”不表示可選,是索引器聲明符的必要部分。而this是C#中的關(guān)鍵字,除了可以聲明索引器以外,還用于限定被相似的名稱隱藏的成員、將對(duì)象作為參數(shù)傳遞到其它方法。
訪問器聲明,也要使用get()和set()訪問器,不同的是使用索引指示器取得的對(duì)象是對(duì)象中各元素的值,而不是特定的數(shù)據(jù)成員。使用索引器的形式為:對(duì)象名.[實(shí)參]
使用索引器也是C#的一個(gè)特色,一個(gè)類往往包含了數(shù)組型的對(duì)象,索引器使得可以像數(shù)組那樣對(duì)對(duì)象使用下標(biāo),為我們提供了通過索引方式方便地訪問類的數(shù)據(jù)信息的方法。6、抽象類特點(diǎn)是什么?舉例說明
用關(guān)鍵字abstract修飾的抽象類是一種沒有被完整定義的類,因此它不能用來實(shí)例化,也就是說,不能產(chǎn)生對(duì)象。設(shè)計(jì)abstract類的目的是為了被繼承,其意義在于:1)、包含派生類的公有成員。這些公有成員在抽象類中定義一次,就可以被反復(fù)使用,提高軟件開發(fā)的效率和可維護(hù)性。2)、規(guī)范行為。抽象方法等具體行為特征的成員實(shí)際上是一種建模過程,規(guī)定了輸入口和輸出口,而將實(shí)現(xiàn)的細(xì)節(jié)留給派生類根據(jù)實(shí)際情況編程。同一個(gè)抽象類的派生類有許多共性,這使得它們有了交互的基礎(chǔ)。下面給出抽象類的聲明。
語(yǔ)法形式:
abstractclass類名{
}抽象類不能產(chǎn)生實(shí)例,因此不能這樣書寫代碼,如:
抽象類名對(duì)象名=new抽象類名(參數(shù)列表)new抽象類名(參數(shù)列表)。這樣的代碼都是錯(cuò)誤的。設(shè)計(jì)抽象類時(shí)要注意以下幾點(diǎn):1)、抽象類雖然不能產(chǎn)生對(duì)象,但可以有構(gòu)造函數(shù)。2)、抽象類是要被繼承的,所以不能和sealed修飾符聯(lián)用。
3)、抽象類的派生類可以依然是抽象類,只有當(dāng)派生類實(shí)現(xiàn)了所有抽象成員后,才演化為一個(gè)普通的類,這時(shí)才能產(chǎn)生對(duì)象。
7、抽象方法
用abstract修飾的方法、屬性和索引器分別稱為抽象方法、抽象屬性、和抽象索引器。它們共同特點(diǎn)是只有行為的定義,卻沒有行為的實(shí)現(xiàn)。
抽象方法是只有方法頭,沒有方法體的方法。抽象方法的聲明格式如下。語(yǔ)法形式:
abstract返回類型方法名(參數(shù)列表);
抽象方法規(guī)定了方法的輸入?yún)?shù)的類型和數(shù)量以及輸出的類型,以此定義了方法的激勵(lì)和響應(yīng)的形式,而在內(nèi)容上可由實(shí)現(xiàn)者任意實(shí)現(xiàn),因此僅憑抽象方法的定義來判斷方法的功能是不可靠的。
抽象屬性中可以選擇get和set關(guān)鍵字,但沒有具體的執(zhí)行語(yǔ)句,抽象屬性的聲明格式如下。
語(yǔ)法形式:
abstract返回類型屬性名{get;set;}
而抽象索引器的聲明形式和抽象屬性的很相似。語(yǔ)法形式:
abstract返回類型this[參數(shù)列表]{get;set;}
在用到abstract關(guān)鍵字時(shí),需要注意以下幾點(diǎn):1)、abstract不能和static同時(shí)修飾同一個(gè)方法。2)、abstract也不能和private同時(shí)修飾同一個(gè)方法,并且不能省略訪問控制符。3)、abstract方法只能出現(xiàn)在abstract類中,并且只有當(dāng)包含此抽象方法的抽象類被繼承之后,才能在派生類中被實(shí)現(xiàn)。
4)、派生類實(shí)現(xiàn)抽象方法時(shí)必須使用關(guān)鍵字override,否則被默認(rèn)為是缺省的關(guān)鍵字new。8、接口
接口是抽象成員的集合,這些抽象成員可以是抽象方法、屬性、索引器、事件,接口是實(shí)現(xiàn)多繼承的工具。實(shí)際上,接口是一些實(shí)現(xiàn)特定功能的抽象成員的集合。一個(gè)類可以繼承多個(gè)接口,從而獲得多個(gè)行為的描述,將它們組合成新的功能并在類中實(shí)現(xiàn)。
接口的聲明。
語(yǔ)法形式:
[接口修飾符]interface接口名:[基接口列表]{
接口體}
其中:
接口修飾符有new、public、protected、internal、private。Interface聲明接口時(shí)的關(guān)鍵字。
接口名一個(gè)標(biāo)識(shí)符,首字母為大寫的I!埃骸北硎纠^承,接口可以多繼承。
基接口列表是一個(gè)或多個(gè)基接口類型,正在被定義的接口將繼承基接口列表中的所有基接口,出現(xiàn)在基接口列表中的基接口也可能繼承了其他的接口,為了方便區(qū)分,把出現(xiàn)在基接口列表中的基接口稱為顯式基接口;涌谥g用“,”分割。接口繼承其所有基接口的所有成員,也可以用new隱藏基接口的成員
usingSystem;
publicinterfaceIgram//聲明圖形接口{
doubleArea();
doubleGramLength();intSides{get;}}
publicinterfaceIDisplay//聲明輸出接口{
voidPrint();}
publicclassSquare:Igram,IDisplay{
privateintsides;
publicintSideLength;publicSquare()//構(gòu)造函數(shù){
sides=4;}
publicintSides//實(shí)現(xiàn)Igram接口的Sides屬性成員{
get{returnsides;}}
publicdoubleArea()//實(shí)現(xiàn)Igram接口的Area方法成員{
return((double)(SideLength*SideLength));}
publicdoubleGramLength()//實(shí)現(xiàn)Igram接口的GramLength方法成員{
return((double)(Sides*SideLength));}
publicvoidPrint()//實(shí)現(xiàn)IDisplay接口的Print方法成員{
Console.WriteLine("\\n計(jì)算正方形面積結(jié)果如下:");Console.WriteLine("邊長(zhǎng):{0}",this.SideLength);Console.WriteLine("周長(zhǎng):{0}",this.GramLength());Console.WriteLine("面積:{0}",this.Area());}}
publicclassApp{
publicstaticvoidMain(){
Squaresq=newSquare();sq.SideLength=5;sq.Print();}}
運(yùn)行結(jié)果:
在同一個(gè)類Square中實(shí)現(xiàn)了兩個(gè)接口:Igram和IDisplay。
9、參數(shù)傳遞
C#中傳入到方法中的參數(shù)不同,可分為4種:傳遞值類型的參數(shù)、傳遞引用類型的參數(shù)、傳遞多個(gè)引用類型參數(shù)和傳遞個(gè)數(shù)不確定的參數(shù)。
傳遞多個(gè)引用類型參數(shù)
return語(yǔ)句一次只能返回一個(gè)結(jié)果,針對(duì)這種情況,C#提供了一種特殊的參數(shù)傳遞方式:傳遞多個(gè)引用類型參數(shù)。完成這種數(shù)據(jù)傳遞方式所使用的是輸出型參數(shù),用關(guān)鍵字out表示。與引用型參數(shù)類似,輸出型參數(shù)也不開辟新的內(nèi)存區(qū)域。它與引用型參數(shù)的區(qū)別:調(diào)用方法前無(wú)需對(duì)變量進(jìn)行初始化,正因?yàn)槿绱耍趏ut參數(shù)沒有被顯示地賦值之前,不能使用。在將實(shí)參作為輸出型參數(shù)傳遞的調(diào)用完成后,該實(shí)參變量將會(huì)被該方法中的形參明確賦值,并將數(shù)據(jù)從方法中傳出至調(diào)用處。out修飾符后應(yīng)跟隨形參類型相同的類型聲明。
下面給出輸出型參數(shù)的實(shí)例,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);}}
運(yùn)行結(jié)果:
傳遞個(gè)數(shù)不確定的參數(shù)
當(dāng)需要傳遞的參數(shù)個(gè)數(shù)不確定時(shí),如求幾個(gè)數(shù)的最大值,由于沒有規(guī)定是幾個(gè)數(shù),運(yùn)行程序時(shí),每次輸入的值的個(gè)數(shù)不一定一樣。為了解決這個(gè)問題,C#采用參數(shù)數(shù)組。形參數(shù)組前如果用params修飾符進(jìn)行聲明就是參數(shù)數(shù)組,通過參數(shù)數(shù)組可以向函數(shù)傳遞個(gè)數(shù)變化的參數(shù)。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);//數(shù)組作為實(shí)參
Console.WriteLine("數(shù)組作為實(shí)參的結(jié)果:");Console.WriteLine("和為:{0}",s);for(i=0;i
Console.WriteLine("a[{0}]={1}",i,a[i]);
Console.WriteLine("與形參數(shù)組的元素屬于同一類型的變量做實(shí)參的結(jié)果:");L=ParamsMeth(refz,23,45);//與形參數(shù)組的元素屬于同一類型的變量做實(shí)參Console.WriteLine("和為:{0}",z);
Console.WriteLine("輸入最后數(shù)值的乘積:{0}",L);}}
運(yùn)行結(jié)果:
10、語(yǔ)句
常用的簡(jiǎn)單語(yǔ)句包括賦值語(yǔ)句、空語(yǔ)句、表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句等C#中常用的三種分支技術(shù):條件運(yùn)算符;if語(yǔ)句;switch語(yǔ)句。C#提供了4種循環(huán)語(yǔ)句:while、do_while、for和foreachbreak語(yǔ)句、continue語(yǔ)句、goto語(yǔ)句、return語(yǔ)句等。1)break語(yǔ)句
除了在switch語(yǔ)句中使用break語(yǔ)句,它還用于循環(huán)結(jié)構(gòu)中,作用是結(jié)束其所在的結(jié)構(gòu)語(yǔ)句。它的格式是:break;
break語(yǔ)句的目標(biāo)地址為包含它的switch、while、do、for、或foreach語(yǔ)句的結(jié)尾,如果不在這些語(yǔ)句塊中,編譯將出錯(cuò)。2)continue語(yǔ)句
continue語(yǔ)句用于循環(huán)結(jié)構(gòu)中,其作用是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)體的判定。格式是:continue;continue語(yǔ)句重新開始一次包含它的while、do、for、或foreach語(yǔ)句的執(zhí)行,其目標(biāo)地址也是上述這些語(yǔ)句的內(nèi)嵌語(yǔ)句結(jié)尾,如果不在這些語(yǔ)句塊中,編譯將出錯(cuò)。
continue語(yǔ)句和break語(yǔ)句的區(qū)別是:continue只跳出一次循環(huán),而break語(yǔ)句則跳出整個(gè)循環(huán)語(yǔ)句或switch語(yǔ)句。當(dāng)有switch、while、do、for或foreach語(yǔ)句相互嵌套的時(shí)候,break語(yǔ)句只是跳出直接包含它的那個(gè)語(yǔ)句塊。如果要在多處嵌套語(yǔ)句中完成轉(zhuǎn)移,必須使用goto語(yǔ)句。3)goto語(yǔ)句
goto語(yǔ)句的功能是將控制轉(zhuǎn)到由標(biāo)簽標(biāo)記的語(yǔ)句。格式是:goto標(biāo)號(hào)標(biāo)識(shí)符;
需要注意的是,goto語(yǔ)句使用比較方便,但是容易引起邏輯上的混亂,因此除了在switch語(yǔ)句中必須從一個(gè)case跳到另一個(gè)case的情況下可以使用goto語(yǔ)句外,其他情況下最好不要使用goto語(yǔ)句。4)return語(yǔ)句
return語(yǔ)句的功能是從它所在的子函數(shù)返回該子函數(shù)的調(diào)用者。格式:return[表達(dá)式];
注意,此處的“[]”符號(hào),表示其里面的表達(dá)式是可選的。
不帶表達(dá)式的return語(yǔ)句只有在不需要計(jì)算數(shù)值的子函數(shù)中出現(xiàn),也就是,其返回類型為void。帶表達(dá)式的return語(yǔ)句只能用在計(jì)算數(shù)值的函數(shù)成員中,也就是其返回類型是非void。
5)throw語(yǔ)句,它的作用是拋出異常
11、公共語(yǔ)言運(yùn)行庫(kù)(CommonLanguageRuntime,CLR)
12、NETFramework類庫(kù)(FrameworkClassLibrary,F(xiàn)CL)
1)System.Object類
2)異常處理Exception3)文件類
System.IO中包含用于在文件中讀取和寫入數(shù)據(jù)的類。
System.IO.Directory公開用于創(chuàng)建、移動(dòng)和枚舉目錄和子目錄的靜態(tài)方法。System.IO.File提供用于創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開文件的靜態(tài)方法。System.IO.Path處理路徑名稱。
System.IO.DirectoryInfo公開用于創(chuàng)建、移動(dòng)和枚舉目錄和子目錄的實(shí)例方法。System.IO.FileInfo創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開文件的實(shí)例方法System.IO.FileStream以文件為主的Stream,既支持同步讀寫操作,也支持異步讀寫操作。
System.IO.StreamReader從字節(jié)流中讀取字符。System.IO.StringWriter向流中寫入字符。
System.IO.FileSystemWatcher偵聽文件系統(tǒng)更改通知,并在目錄或目錄中的文件發(fā)生更改時(shí)引發(fā)事件。
StreamReader,StreamWriter完成文件的讀寫操作,String.Split()完成字符串的拆分。
openFileDialogsaveFileDialog
引用一個(gè)OpenFileDialog對(duì)象.為檢查用戶在退出對(duì)話框時(shí)是否單擊了”打開”按鈕,應(yīng)檢查對(duì)象.ShowDialog()的返回值是否等于DialogResult.OK
用FileStream打開一個(gè)文件時(shí),可用FileMode參數(shù)控制4)圖形類
Pen類的構(gòu)造函數(shù)有四種,使用方法如下。(1)創(chuàng)建某一顏色的Pen對(duì)象:publicPen(Color)(2)創(chuàng)建某一刷子樣式的Pen對(duì)象:publicPen(Brush)
(3)創(chuàng)建某刷子樣式并具有相應(yīng)寬度的Pen對(duì)象:publicPen(Brush,float)(4)創(chuàng)建某一顏色和相應(yīng)寬度的Pen對(duì)象:publicPen(Color,float)Pen對(duì)象的常用屬性
(1)Alignment屬性:用來獲取或設(shè)置此Pen對(duì)象的對(duì)齊方式。(2)Color屬性:用來獲取或設(shè)置此Pen對(duì)象的顏色。畫橢圓
[格式1]:publicvoidDrawEllipse(Penpen,Rectanglerect);
[格式2]:publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight);
(3)Width屬性:用來獲取或設(shè)置此Pen對(duì)象的寬度。畫矩形
[格式1]:publicvoidDrawRectangle(Penpen,Rectanglerect);[格式2]:publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight);
13、異常處理都處理哪些錯(cuò)誤,舉例說明;
異常(Exception)是程序執(zhí)行時(shí)遇到的任何錯(cuò)誤情況或意外行為。如除數(shù)為零、分配內(nèi)存空間失敗,都能引發(fā)異常。異常處理(ExceptionHanding)指的是一種機(jī)制或方法,通過它,用戶創(chuàng)建的應(yīng)用程序能夠解決或處理異常。
C#提供了一個(gè)標(biāo)準(zhǔn)類System.Exception,此類是所有異常的基類;怑xception下存在兩類異常:一個(gè)是從SystemException派生的預(yù)定義公共語(yǔ)言運(yùn)行庫(kù)異常類,另一個(gè)是從ApplicationException派生的用戶定義的應(yīng)用程序異常類。Exception包含很多屬性,可以幫助標(biāo)識(shí)異常的代碼位置、類型、幫助文件和原因,常用屬性如下所示:
HelpLink屬性:獲取或設(shè)置指向此異常所關(guān)聯(lián)幫助文件的鏈接。InnerException屬性:獲取導(dǎo)致當(dāng)前異常的Exception實(shí)例。Message屬性:獲取描述當(dāng)前異常的消息。
Source屬性:獲取或設(shè)置導(dǎo)致錯(cuò)誤的應(yīng)用程序或?qū)ο蟮拿Q。
StackTrace屬性:獲取當(dāng)前異常發(fā)生時(shí)調(diào)用堆棧上的幀的字符串表示形式。argetSite屬性:獲取引發(fā)當(dāng)前異常的方法。
14、ADO.NET有哪些數(shù)據(jù)對(duì)象?各有什么功能?
NETFramework數(shù)據(jù)提供程序的實(shí)質(zhì)是數(shù)據(jù)源與應(yīng)用程序的橋梁,并且都有一定的標(biāo)準(zhǔn),它們都實(shí)現(xiàn)了相同的基類:Connection、Command、DataAdapter和DataReader.Connection對(duì)象主要用于建立與數(shù)據(jù)源的活動(dòng)連接。
Command對(duì)象可以對(duì)數(shù)據(jù)源執(zhí)行查詢、插入、刪除、更新等各種操作。
DataReader對(duì)象是從一個(gè)數(shù)據(jù)源中選擇某些數(shù)據(jù)的最簡(jiǎn)單方法,尤其適合讀取大量的數(shù)據(jù),因?yàn)樗辉趦?nèi)存中緩存。
DataAdapter是連接到數(shù)據(jù)庫(kù)以填充DataSet對(duì)象
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有哪些內(nèi)置對(duì)象?ASP.NET中有哪些驗(yàn)證控件?Global.asax文件的功能?
16、.NETFramework有哪些數(shù)據(jù)提供程序?各自位于哪個(gè)命名空間?17、ADO.NET使用System.Data.SqlClient命名空間的類訪問SQLServer數(shù)據(jù)庫(kù)中的數(shù)據(jù);使用System.Data.OleDb訪問Access數(shù)據(jù)庫(kù)中的數(shù)據(jù)。。。18、連接字符串的設(shè)置、數(shù)據(jù)庫(kù)連接組件的用法、19、OleDbCommand控件的使用
20、有幾種方法可以實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)?
21、.aspx中主要控件
包括:TextBox控件、下拉列表框(DropDownList)、驗(yàn)證控件、Button控件、RangeValidator、GridView、DataSet控件
22、VisualStudio.NET的窗口解決方案資源管理器、類視圖、資源視圖、屬性可以查看哪些內(nèi)容?23、關(guān)鍵字
interface從派生類中訪問基類的成員,可以使用base關(guān)鍵字、this關(guān)鍵字、overrideg、using關(guān)鍵字作用
調(diào)用被隱藏的基類的成員,必須要使用base關(guān)鍵字。若訪問被繼承但是沒有被簽名相同的派生類成員隱藏的基類成員,則不必使用base關(guān)鍵字,因?yàn)樗鼈冊(cè)谂缮愔腥匀皇俏ㄒ坏摹?/p>
24、Web.config文件的功能
Web站點(diǎn)的配置,可以直接在Internet服務(wù)管理器(IIS)上進(jìn)行,使用也比較方便,但是這種方法有一個(gè)缺點(diǎn):擴(kuò)展性和靈活性較差。為了提高擴(kuò)展性和靈活性,ASP.NET專門設(shè)置一個(gè)Web.config文件來保存配置信息。與Global.asax文件不同,Web.config不一定要放在Web應(yīng)用程序的根目錄下。同一個(gè)Web應(yīng)用程序下的所有子目錄都可以擁有自己的Web.config文件。此時(shí)IIS會(huì)先繼承根目錄下的配置設(shè)置,如果遇到相同的配置標(biāo)記,則現(xiàn)行目錄下的Web.config配置將覆蓋根目錄下同名的配置設(shè)置。
1)配置與調(diào)用數(shù)據(jù)庫(kù)鏈接字符串
在Web.config文件中可以使用配置節(jié)來配置應(yīng)用程序的配置數(shù)據(jù)庫(kù)鏈接字符串。在配置數(shù)據(jù)庫(kù)鏈接字符串時(shí),使用方式,并設(shè)置兩個(gè)鍵/值對(duì),鍵的名稱為name和connectionString。配置數(shù)據(jù)庫(kù)鏈接字符串的程序代碼如下:
采用下面方式可以讀取此種設(shè)置方式:
stringsqldb=ConfigurationManager.ConnectionStrings["Sqlserver"].ConnectionString;
也可以在與之間設(shè)置數(shù)據(jù)庫(kù)的鏈接字符串。代碼如下:
"RemoteOnly"只對(duì)不在本地Web服務(wù)器上運(yùn)行的
用戶顯示自定義(友好的)信息。出于安全目的,建議使用此設(shè)置,以便不向遠(yuǎn)程客戶端顯示應(yīng)用程序的詳細(xì)信息。-->配置節(jié)
配置節(jié)可以用來配置應(yīng)用程序級(jí)別跟蹤,為應(yīng)用程序中的每一頁(yè)啟用跟蹤日志輸出。配置節(jié)的一種配置的程序代碼如下:
配置節(jié)
配置節(jié)用來配置應(yīng)用程序的身份驗(yàn)證策略,主要包括有Windows、Form、Passport和None。配置節(jié)的一種配置的程序代碼如下:
25、數(shù)據(jù)庫(kù)中表的增加、查找、修改和刪除。
26、驗(yàn)證控件
ASP.NET驗(yàn)證控件控件名功能RangeValidatorRegularExpressionValidatorRequiredFieldValidatorValidationSummaryCustomValidatorCompareValidator檢查用戶的輸入是否在一個(gè)特定的范圍內(nèi)檢查用戶的輸入是否與正則表達(dá)式所定義的模式一致檢查用戶是否在輸入控件中輸入了數(shù)據(jù)顯示頁(yè)面上所有驗(yàn)證控件所搜索到的驗(yàn)證錯(cuò)誤通過用戶自定義函數(shù)判定輸入的數(shù)據(jù)是否有效將輸入控件的值同常數(shù)值或其它輸入控件的值相比較,以確定兩個(gè)值是否與由比較運(yùn)算符(>、=、Global.asax文件,正如在第九章中已經(jīng)介紹到的,Global.asax文件必須存放在Web主目錄中,當(dāng)瀏覽器與Web服務(wù)器連接時(shí),會(huì)先去檢查Web主目錄有沒有Global.asax文件,若有,就先去執(zhí)行該文件。在Global.asax文件中有一些特定的事件很有用,下面按事件觸發(fā)順序給出幾個(gè)常用的事件:
1)、Application_Start事件
第一個(gè)用戶首次請(qǐng)求頁(yè)面時(shí)觸發(fā)。
2)、Session_Start事件
每個(gè)用戶首次請(qǐng)求頁(yè)面時(shí)觸發(fā)。
3)、Session_End事件
在關(guān)閉應(yīng)用程序或每個(gè)用戶在規(guī)定時(shí)間內(nèi)沒有提出請(qǐng)求時(shí)觸發(fā)。
4)、Application_End事件
在關(guān)閉應(yīng)用程序或最后一個(gè)用戶在規(guī)定時(shí)間內(nèi)沒有提出請(qǐng)求時(shí)觸發(fā)。
一般情況下,可以在Application_Start事件中定義并初始化公用變量,以便所有請(qǐng)求頁(yè)面的用戶都能共享這些變量。由于每個(gè)用戶都有自己的Session,所以可以在Session_Start事件中為客戶設(shè)置初始化信息。
29、簡(jiǎn)單數(shù)據(jù)綁定和復(fù)雜數(shù)據(jù)綁定30、單值綁定和多值綁定
1、單值綁定
單值綁定是指將一個(gè)數(shù)據(jù)綁定到一個(gè)單值控件上,單值控件一次顯示一個(gè)數(shù)據(jù)。大多數(shù)Web服務(wù)器控件和HTML控件都是單值控件,如TextBox、Label、Input(Text)控件。其實(shí),所有的控件都允許把數(shù)據(jù)賦予它的某個(gè)屬性,以完成單值綁定。例如,在實(shí)際應(yīng)用中,可以使用ADO.NET技術(shù)從數(shù)據(jù)庫(kù)中獲得某個(gè)數(shù)據(jù),然后將其賦予Label的Text屬性或ListBox的BackColor屬性等,就完成了單值綁定。
2、多值綁定
多值綁定是指將一組數(shù)據(jù)綁定到多值控件上,多值控件可以同時(shí)顯示一個(gè)或多個(gè)數(shù)據(jù)記錄,如Web服務(wù)器控件的ListBox、RadioButtonList、CheckBoxList等。在Web應(yīng)用中,.NET提供了多值數(shù)據(jù)綁定控件又可以分為:列表控件和復(fù)合綁定控件。列表控件有:DropDownList、ListBox、RadioButtonList和CheckBoxList控件等;復(fù)合綁定控件有Repeater、DataList、以及由DataGrid控件改進(jìn)的GridView控件。
另外,根據(jù)綁定數(shù)據(jù)的時(shí)間不同,.NET的數(shù)據(jù)綁定技術(shù)還可以分為以下兩種:1)、在設(shè)計(jì)時(shí)綁定:在設(shè)計(jì)系統(tǒng)時(shí)指定綁定控件的數(shù)據(jù)源。
2)、在運(yùn)行時(shí)綁定:用編程的方式,在系統(tǒng)運(yùn)行時(shí)指定綁定控件的數(shù)據(jù)源。
31、Web服務(wù)器控件
屬于System.Web.UI.WebControls命名空間,大多數(shù)Web服務(wù)器控件類是從該命名空間的基類WebControl直接或間接派生的。32、GridView控件
GridView控件是ASP.NET2.0新增加的控件,是最常用的數(shù)據(jù)綁定控件,用于以表格形式在頁(yè)面上顯示數(shù)據(jù)。
.1GridView控件概述
GridView控件是一個(gè)網(wǎng)格狀的數(shù)據(jù)綁定控件,用于以表格的形式來顯示、編輯和刪除多種不同數(shù)據(jù)源(數(shù)據(jù)庫(kù)、XML文件等)中的數(shù)據(jù)。以表格顯示數(shù)據(jù)源的值,表中每列表示一個(gè)字段,而每行表示一條記錄。GridView控件具有如下功能:
1)、通過數(shù)據(jù)源控件自動(dòng)綁定和顯示數(shù)據(jù)。2)、內(nèi)置排序、更新和刪除功能。3)、內(nèi)置分頁(yè)、行選擇功能。
4)、可通過主題和樣式進(jìn)行自定義外觀。
添加GridView控件,可以在頁(yè)面的HTML視圖中通過添加代碼實(shí)現(xiàn)。例如,要添加ID為“GridView1”的控件,代碼如下:
或在設(shè)計(jì)視圖中直接拖拽工具箱中的GridView控件圖標(biāo)來添加。添加后的控件如圖10.5所示。
圖10.5GridView控件設(shè)計(jì)視圖
.2常用屬性、方法和事件
1、常用屬性
GridView控件功能很強(qiáng)大,常用的屬性有:
AllowSorting屬性:獲取或設(shè)置一個(gè)值,該值指示是否啟用排序。
AutoGenerateColumns屬性:獲取或設(shè)置一個(gè)值,該值指示是否為數(shù)據(jù)源中的每個(gè)字段自動(dòng)創(chuàng)建綁定字段。
Columns屬性:獲取表示GridView控件中列字段的DataControlField對(duì)象的集合。CssClass屬性:獲取或設(shè)置由Web服務(wù)器控件在客戶端呈現(xiàn)的級(jí)聯(lián)樣式表(CSS)類。
DataMember屬性:當(dāng)數(shù)據(jù)源包含多個(gè)不同的數(shù)據(jù)項(xiàng)列表時(shí),獲取或設(shè)置數(shù)據(jù)綁定控件綁定到的數(shù)據(jù)列表的名稱。
DataSource屬性:獲取或設(shè)置對(duì)象,數(shù)據(jù)綁定控件從該對(duì)象中檢索其數(shù)據(jù)項(xiàng)列表。DataSourceID屬性:獲取或設(shè)置控件的ID,數(shù)據(jù)綁定控件從該控件中檢索其數(shù)據(jù)項(xiàng)列表。EditIndex屬性:獲取后設(shè)置要編輯的行的索引。
EditRowStyle屬性:獲取對(duì)TableItemStyle對(duì)象的引用,使用該對(duì)象可以設(shè)置GridView控件中為進(jìn)行編輯而選中的行的外觀。
Page屬性:獲取對(duì)包含服務(wù)器控件的Page實(shí)例的引用。
Rows屬性:獲取表示GridView控件中數(shù)據(jù)行的GridViewRow對(duì)象的集合。SelectedIndex屬性:獲取或設(shè)置GridView控件中的選中行的索引。
ShowFooter屬性:獲取或設(shè)置一個(gè)值,該值指示是否在GridView控件中顯示腳注行。
ShowHeader屬性:獲取或設(shè)置一個(gè)值,該值指示是否在GridView控件中顯示標(biāo)題行。
SortDirection屬性:獲取正在排序的列的排序方向。
SortExpression屬性:獲取與正在排序的列關(guān)聯(lián)的排序表達(dá)式。2、常用方法
GridView控件常用方法有:
DataBind()方法:將數(shù)據(jù)源綁定到GridView控件。
DeleteRow()方法:從數(shù)據(jù)源中刪除位于指定索引位置的記錄。FindControl()方法:在當(dāng)前的命名容器中搜索指定的服務(wù)器控件。
Sort()方法:根據(jù)指定的排序表達(dá)式和方向?qū)ridView控件進(jìn)行排序。UpdateRow()方法:使用行的字段值更新位于指定行索引位置的記錄。3、常用事件
GridView控件提供在導(dǎo)航或編輯操作之前和之后發(fā)生的事件,而在每次發(fā)生事件時(shí)都可以運(yùn)行一個(gè)自定義程序。GridView控件常用的事件有:
PageIndexChanged事件:在單擊某一頁(yè)導(dǎo)航按鈕時(shí),但在GridView控件處理分頁(yè)操作之后發(fā)生。
PageIndexChanging事件:在單擊某一頁(yè)導(dǎo)航按鈕時(shí),但在GridView控件處理分頁(yè)操作之前發(fā)生。
RowCancelingEdit事件:?jiǎn)螕艟庉嬆J街心骋恍械摹叭∠卑粹o以后,在該行退出編輯模式之前發(fā)生。
RowCommand事件:當(dāng)單擊GridView控件中的按鈕時(shí)發(fā)生。RowCreated事件:在GridView控件中創(chuàng)建行時(shí)發(fā)生。
RowDataBound事件:在GridView控件中將數(shù)據(jù)行綁定到數(shù)據(jù)時(shí)發(fā)生。
RowDeleted事件:在單擊某一行的“刪除”按鈕時(shí),但在GridView控件刪除該行之后發(fā)生。此事件常用于檢查刪除操作的結(jié)果。
RowDeleting事件:在單擊某一行的“刪除”按鈕時(shí),但在GridView控件刪除該行之前發(fā)生。此事件常用于取消刪除操作。
RowEditing事件:發(fā)生在單擊某一行的“編輯”按鈕以后,GridView控件進(jìn)入編輯模式之前。此事件通常用于取消編輯操作。
RowUpdated事件:發(fā)生在單擊某一行的“更新”按鈕,并且GridView控件對(duì)該行進(jìn)行更新之后。此事件通常用于檢查更新操作的結(jié)果。
RowUpdating事件:發(fā)生在單擊某一行的“更新”按鈕以后,GridView控件對(duì)該行進(jìn)行更新之前。此事件通常用于取消更新操作。
SelectedIndexChanged事件:發(fā)生在單擊某一行的“選擇”按鈕,GirdView控件對(duì)相應(yīng)的選擇操作進(jìn)行處理之后。此事件常用于在該控件中選定某行之后執(zhí)行某項(xiàng)任務(wù)。SelectedIndexChanging事件:發(fā)生在單擊某一行的“選擇”按鈕以后,GirdView控件對(duì)相應(yīng)的選擇操作進(jìn)行處理之前。此事件常用于取消選擇操作。
Sorted事件:在單擊用于列排序的超鏈接時(shí),但在GridView控件對(duì)相應(yīng)的排序操作進(jìn)行處理之后發(fā)生。此事件常用于在用戶單擊用于列排序的超鏈接之后執(zhí)行某個(gè)任務(wù)。
Sorting事件:在單擊用于列排序的超鏈接時(shí),但在GridView控件相對(duì)的排序操作進(jìn)行處理之前發(fā)生。此事件常用于取消排序操作或執(zhí)行自定義的排序程序。
.3GridView中的字段類型
GridView控件中的每一列由一個(gè)DataControlField對(duì)象表示。默認(rèn)情況下,AutoGenerateColumns屬性被設(shè)置為true,為數(shù)據(jù)源中的每一個(gè)字段創(chuàng)建一個(gè)AutoGeneratedField對(duì)象。然后每個(gè)字段作為GridView控件中的列呈現(xiàn)出來,其順序和每個(gè)字段在數(shù)據(jù)源中的順序相同。
將AutoGenerateColumns屬性設(shè)置為false,然后可以自己定義列字段集合,也可以手動(dòng)控制哪些字段將顯示在GridView控件中。列字段集合可以用聲明方式定義,需要在GridView控件的開始和結(jié)束標(biāo)記之間添加標(biāo)記。然后在此標(biāo)記之間列出想要包含在內(nèi)的列字段,這些包含在內(nèi)的列將以所列出的順序添加到Columns集合中。Columns集合存儲(chǔ)該控件中的所有列字段,并可以以編程方式管理GridView控件中的列字段。
不同的列字段類型決定控件中各列的行為。下面給出可以使用的不同列字段類型:BoundField:顯示數(shù)據(jù)源中某個(gè)字段的值,是GridView控件的默認(rèn)列類型。
ButtonField:為GridView控件中的每一項(xiàng)顯示一個(gè)命令按鈕,即整列由按鈕組成,可以是Button、ImageButton或LinkBotton。
CheckBoxField:為GridView控件中的每一項(xiàng)顯示一個(gè)復(fù)選框。這種列字段類型常用于顯示布爾值類型的字段。
CommandField:在GridView控件中顯示用于執(zhí)行選擇、編輯、插入或刪除操作的命令按鈕。這些命令按鈕不需要編寫任何代碼就可以實(shí)現(xiàn)相應(yīng)的操作。
HyperLinkField:將數(shù)據(jù)源中的某個(gè)字段的值在GridView控件中顯示為超鏈接。ImageField:為GridView控件中的每一項(xiàng)顯示一個(gè)圖像。
TemplateField:根據(jù)指定的模板為GridView控件中的每一項(xiàng)顯示用戶定義的內(nèi)容。常用于顯示控件。
.4GridView數(shù)據(jù)顯示
GridView控件可綁定到數(shù)據(jù)源控件以及實(shí)現(xiàn)了System.Collections.IEnumerable接口的任何數(shù)據(jù),如System.Data.DataView、System.Collections.ArrayList、System.Collections.Hashtable等。顯示這些數(shù)據(jù)分為兩種情況:自動(dòng)顯示數(shù)據(jù)和定制顯示數(shù)據(jù)。
1、自動(dòng)顯示數(shù)據(jù)
若要綁定到某個(gè)數(shù)據(jù)源,將GridView控件的DataSourceID屬性設(shè)置為該數(shù)據(jù)源控件的ID值。GridView控件自動(dòng)綁定到指定的數(shù)據(jù)源控件,還可以非常簡(jiǎn)單地進(jìn)行數(shù)據(jù)的顯示。較常用的數(shù)據(jù)源是SqlDataSource。下面通過一個(gè)實(shí)例:介紹自動(dòng)顯示數(shù)據(jù)的過程。將數(shù)據(jù)表StudentInfo中的數(shù)據(jù)通過SqlDataSource數(shù)據(jù)源自動(dòng)顯示在GridView中。
1)、新建項(xiàng)目,在項(xiàng)目中創(chuàng)建GVexample.aspx頁(yè)面。2)、在頁(yè)面上添加一個(gè)GridView控件,在本例中保留的默認(rèn)設(shè)置。3)、通過SqlDataSource創(chuàng)建一個(gè)訪問關(guān)系數(shù)據(jù)庫(kù)的控件。
4)、將GridView的DataSourceID設(shè)置為SqlDataSource對(duì)象的ID。設(shè)置完后的頁(yè)面如圖所示。
GridView自動(dòng)顯示數(shù)據(jù)界面
對(duì)應(yīng)GVexample.aspx頁(yè)面的HTML代碼如下:htmlxmlns="">
GridView實(shí)例
此實(shí)例不需要編寫任何代碼,直接編譯運(yùn)行,運(yùn)行結(jié)果如圖10.7所示。
圖10.7GridView自動(dòng)顯示數(shù)據(jù)運(yùn)行結(jié)果
為了使GridView的外觀更加美觀,可以設(shè)置以下屬性:
AlternatingRowStyle屬性:GridView控件中的交替數(shù)據(jù)行的樣式設(shè)置。當(dāng)設(shè)置了此屬性后,數(shù)據(jù)行交替使用RowStyle設(shè)置和AlternatingRowStyle設(shè)置進(jìn)行顯示。EditRowStyle屬性:GridView控件中正在編輯的行的樣式設(shè)置。
EmptyDataRowStyle屬性:當(dāng)數(shù)據(jù)源不包含任何記錄時(shí),GridView控件中顯示空數(shù)據(jù)行的樣式設(shè)置。
FooterStyle屬性:腳注行的樣式設(shè)置。HeaderStyle屬性:標(biāo)題行的樣式設(shè)置。PagerStyle屬性:頁(yè)導(dǎo)航行的樣式設(shè)置。RowStyle屬性:數(shù)據(jù)行的樣式設(shè)置。
SelectedRowStyle屬性:選中行的樣式設(shè)置。
在IDE環(huán)境中,可以方便地在屬性窗口中設(shè)置這些屬性。此外,GridView控件內(nèi)置了一個(gè)GridView任務(wù)設(shè)計(jì)器,通過其中的“自動(dòng)套用格式”超級(jí)鏈接,可以自動(dòng)套用.NET內(nèi)置的一些常見的格式。
2、定制顯示數(shù)據(jù)
在例10-4中,GridView控件的AutoGenerateColumns屬性保持的默認(rèn)值:true,這為數(shù)據(jù)源中的每一列自動(dòng)創(chuàng)建一個(gè)BoundField列,其標(biāo)頭為該列在數(shù)據(jù)源中的列名,數(shù)據(jù)按在數(shù)據(jù)源中的順序全部顯示出來。在有些情況下,不需要這樣顯示。如,想要改變列的先后順序或改變GridView中顯示的標(biāo)頭,或顯示數(shù)據(jù)源中部分字段的值。上述情況,就需要定制顯示數(shù)據(jù)。若要定制顯示數(shù)據(jù),首先要設(shè)置AutoGenerateColumns屬性為false,即不能讓GridView自動(dòng)產(chǎn)生列,而是通過編輯Columns屬性設(shè)置各個(gè)列的定義。
下面通過實(shí)例:例10-5來介紹定制顯示數(shù)據(jù)方式。在例10-5中,有兩個(gè)頁(yè)面Show.aspx和Display.aspx頁(yè)。在Show.aspx頁(yè)中添加一個(gè)GridView控件,在此控件中只顯示表StudentInfo表中的學(xué)號(hào)、姓名和班級(jí),并將班級(jí)顯示為超鏈接的列,單擊超鏈接跳轉(zhuǎn)到Display頁(yè)面。
例10-1)、新建項(xiàng)目
新建項(xiàng)目,在項(xiàng)目中加入Show.aspx和Display.aspx頁(yè)。在Show.aspx頁(yè)中加入一個(gè)GridView控件,設(shè)置其AutoGenerateColumns屬性為false,然后,編輯Columns屬性設(shè)置各個(gè)列的定義。Display.aspx頁(yè)不需要做任何設(shè)置,創(chuàng)建完后的項(xiàng)目如圖10.8所示。
圖10.8GridView定制顯示數(shù)據(jù)界面
對(duì)應(yīng)的Show.aspx頁(yè)的HTML代碼如下:
這里,語(yǔ)句實(shí)現(xiàn)添加標(biāo)題為“編號(hào)”的列,而該列要顯示的數(shù)據(jù)由屬性DataField決定,當(dāng)賦值為StudentID,表示可以顯示數(shù)據(jù)源中的字段“StudentID”。在Columns定義的最后,添加了超鏈接列:HyperLinkField。下面給出HyperLinkField的屬性:
DataNavigateUrlFields屬性:獲取或設(shè)置數(shù)據(jù)源中字段的名稱,用于為HyperLinkField對(duì)象中的超鏈接構(gòu)造URL。
DataNavigateUrlFormatString屬性:獲取或設(shè)置用于指定格式的字符串,HyperLinkField對(duì)象中的超鏈接的URL將以此格式呈現(xiàn)。
DataTextField屬性:獲取或設(shè)置數(shù)據(jù)源中的字段的名稱,此名稱包含要為HyperLinkField對(duì)象中的超鏈接標(biāo)題顯示的文本。
DataTextFormatString屬性:獲取或設(shè)置用于指定格式的字符串,HyperLinkField對(duì)象中的超鏈接標(biāo)題將以此格式顯示。Text屬性:超鏈接列中顯示的文本。
NavigateUrl屬性:當(dāng)單擊列中的超級(jí)鏈接時(shí)鏈接到的URL。在本例中,設(shè)置了如下屬性:DataNavigateUrlFields="StudentID"
DataNavigateUrlFormatString="Display.aspx?id={0}"DataTextField="StudentID"
DataTextFormatString="#{0}>>"NavigateUrl="~/Display.aspx"這里,"Display.aspx?id={0}"中的“{0}”表示要傳遞的數(shù)據(jù)字段對(duì)應(yīng)單擊行的數(shù)據(jù)本身。2)、編輯代碼
因?yàn),沒有指定GridView的數(shù)據(jù)源,因此需要編輯代碼使用DataBind方法將數(shù)據(jù)源綁定到GridView中。雙擊Show.aspx的設(shè)計(jì)頁(yè)面,進(jìn)入編輯頁(yè)面,輸入如下代碼:protectedvoidPage_Load(objectsender,EventArgse){
//連接數(shù)據(jù)庫(kù)
SqlConnectionconn=newSqlConnection();
conn.ConnectionString="Server=localhost;Database=Student;UserID=sa;PWD=sa";
//使用SqlCommand提交查詢命令
SqlCommandselcomm=newSqlCommand("select*fromStudentInfo",conn);try{
conn.Open();//打開連接//獲取數(shù)據(jù)適配器
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();//關(guān)閉連接}}
然后在編輯Display.aspx頁(yè)的代碼,代碼如下:protectedvoidPage_Load(objectsender,EventArgse){
//得到傳遞的參數(shù)
stringSID=Page.Request.QueryString["id"];//連接數(shù)據(jù)庫(kù)
SqlConnectionconn=newSqlConnection();
conn.ConnectionString="Server=localhost;Database=Student;UserID=sa;PWD=sa";
//使用SqlCommand提交查詢命令
SqlCommandselcomm=newSqlCommand("select*fromStudentInfowhereStudentID="+SID+"",conn);try{
conn.Open();//打開連接//創(chuàng)建SqlDataReader
SqlDataReaderdr=selcomm.ExecuteReader();if(dr.Read()){
Response.Write("學(xué)號(hào):"+dr["XueHao"]+"");Response.Write("姓名:"+dr["SName"]+"");Response.Write("班級(jí):"+dr["Class"]+"");}}
catch(Exceptionex){
Response.Write(ex.Message);}
finally{
conn.Close();//關(guān)閉連接}
}3)、編譯運(yùn)行
運(yùn)行Table.aspx頁(yè)面,得到的運(yùn)行結(jié)果如圖10.9所示。
圖10.9GridView定制顯示數(shù)據(jù)結(jié)果
從圖10.9可見,GridView控件中并沒有把StudentInfo表中的所有列數(shù)據(jù)顯示出來,而是只顯示出要求顯示的列:編號(hào)、學(xué)號(hào)、姓名和班級(jí),并把最后一列設(shè)為超級(jí)鏈接列。單擊任何一行的超級(jí)鏈接,都將跳轉(zhuǎn)到Display.aspx頁(yè),并在Display.aspx頁(yè)中顯示對(duì)應(yīng)的學(xué)生信息。若單擊第二行的超鏈接,運(yùn)行結(jié)果如圖10.10所示。
圖10.10超鏈接頁(yè)面運(yùn)行結(jié)果
10.3.5編輯和刪除數(shù)據(jù)
GridView控件具有一些內(nèi)置功能,允許用戶不需要編程就可以編輯或刪除記錄。使用內(nèi)置編輯或刪除功能的步驟如下:
1)、為GridView添加需要的修改、刪除、選擇列。為GirdView控件添加這些列很簡(jiǎn)單,在屬性窗口中,將AutoGenerateDeleteButton屬性、AutoGenerateEditButton屬性和AutoGenerateSelectButton屬性的值設(shè)置為True,就可以把這些行添加上。在例10-4的基礎(chǔ)上,添加這些列后的GridView外觀如圖10.11所示。
圖10.11添加編輯、刪除、選擇列的GridView界面
2)、配置數(shù)據(jù)源。
這里采用的是SqlDataSource數(shù)據(jù)源,若想通過GridView控件內(nèi)置功能實(shí)現(xiàn)刪除、修改數(shù)據(jù)等操作,需要在對(duì)SqlDataSource數(shù)據(jù)源配置時(shí),單擊“高級(jí)”按鈕,在彈出的對(duì)話框中選中“生成INSERT,UPDATE,DELETE語(yǔ)句”,而且,在選擇數(shù)據(jù)時(shí),一低要把主鍵字段選上。
然后,運(yùn)行頁(yè)面就可以直接實(shí)現(xiàn)編輯、刪除的功能了。運(yùn)行頁(yè)面,單擊第一行的編輯按鈕,頁(yè)面如圖10.12所示。
圖10.12處于編輯狀態(tài)的GridView數(shù)據(jù)行
當(dāng)然也可以使用事件和模板來自定義GridView控件的編輯或刪除功能,這里不再詳細(xì)描述,在具體應(yīng)用中,可視情況選擇使用。
10.3.6分頁(yè)顯示數(shù)據(jù)和數(shù)據(jù)排序
如果顯示數(shù)據(jù)太多,GridView控件可以分頁(yè)進(jìn)行顯示,與這個(gè)功能相關(guān)的屬性有:AllowPaging屬性:獲取或設(shè)置一個(gè)值,該值指示是否啟動(dòng)分頁(yè)。
PageCount屬性:獲取在GridView控件中顯示數(shù)據(jù)源記錄所需的頁(yè)數(shù)。PageIndex屬性:獲取或設(shè)置當(dāng)前顯示頁(yè)的索引。
PageSize屬性:獲取或設(shè)置GridView控件在每頁(yè)上所顯示的記錄的數(shù)目。
要想在GridView中實(shí)現(xiàn)分頁(yè),可以將AllowPaging屬性設(shè)置為True,再設(shè)置PageSize為一個(gè)值,便設(shè)定了在每頁(yè)上所顯示的記錄行數(shù)。若要根據(jù)GridView的某一列對(duì)數(shù)據(jù)進(jìn)行排序,則將AllowSorting屬性設(shè)置為True,便可進(jìn)行排序。
33、34、textBox1.Text被賦值為12,textBox2.Text被賦值為45,label1.Text=textBox1.Text+textBox2.Text;得到是字符串還是數(shù)值。35、i+=j;的等效語(yǔ)句是i=j+j嗎?36、Main函數(shù)是唯一允許的全局函數(shù)37、C#中一條語(yǔ)句必須寫在一行內(nèi);
拋出異常
拋出異常有兩種方式。如果是系統(tǒng)自動(dòng)生成異常類對(duì)象,則不需要編寫任何代碼。如,在進(jìn)行整數(shù)除法運(yùn)行時(shí),當(dāng)分母為零時(shí),就會(huì)自動(dòng)產(chǎn)生一個(gè)System.DivideByZeroException類的對(duì)象。如果是強(qiáng)制拋出,則使用throw語(yǔ)句來實(shí)現(xiàn),throw語(yǔ)句用于立即無(wú)條件地引發(fā)異常,控制永遠(yuǎn)不會(huì)執(zhí)行緊跟在throw后面的語(yǔ)句。
Throw語(yǔ)句的形式:Throw[異常對(duì)象];
下面給出使用throw語(yǔ)句如何強(qiáng)制拋出異常,如例5-11所示。例5-11
usingSystem;
publicclassThrowTest{
staticvoidMain(){
strings;
Console.WriteLine("請(qǐng)輸入字符串:");s=Console.ReadLine();if(s=="C#"){
thrownewArgumentNullException();}
Console.Write("Thestringsisnull");//不會(huì)執(zhí)行
}}運(yùn)行結(jié)果:
在例5-11中,當(dāng)輸入字符串“C#”后,賦值給s。這本來是正確的輸入,然而由于強(qiáng)制拋出“參數(shù)為空”的異常,因此輸出上面的結(jié)果。而throw后面的Console.Write("Thestringsisnull")語(yǔ)句不會(huì)得到執(zhí)行。
捕獲處理異常
異常處理由try語(yǔ)句處理,try語(yǔ)句提供了一種機(jī)制來捕捉塊執(zhí)行過程中發(fā)生的異常,它有三中形式:
try-catch:可有一個(gè)或多個(gè)catch塊語(yǔ)句的try塊語(yǔ)句。try-finally:跟有一個(gè)finally塊語(yǔ)句的try塊語(yǔ)句。
try-catch-finally:跟有一個(gè)或多個(gè)catch塊語(yǔ)句和一個(gè)finally語(yǔ)句的try塊語(yǔ)句。catch用于處理語(yǔ)句塊中出現(xiàn)的異常,catch的格式是:catch(class-type標(biāo)識(shí)符)
catch語(yǔ)句的參數(shù)是一個(gè)類類型,此類必須是System.Exception或者是它的派生類的類型。當(dāng)一個(gè)catch語(yǔ)句同時(shí)指定了類類型和標(biāo)識(shí)符時(shí),就聲明了一個(gè)同名同類型的異常變量。異常變量相當(dāng)于一個(gè)只讀的局部變量,它的有效區(qū)間是catch塊語(yǔ)句內(nèi)部。在catch塊語(yǔ)句執(zhí)行過程中,異常變量代表當(dāng)前正被處理的異常。異常對(duì)象中有很多重要的錯(cuò)誤信息,若想引用異常對(duì)象,就必須定義異常變量。
下面分別介紹try語(yǔ)句的三種形式。1、try-catch
try-catch語(yǔ)句是可有一個(gè)或多個(gè)catch塊語(yǔ)句的try塊語(yǔ)句,一般格式如下:try
{;//可能引發(fā)異常的語(yǔ)句}catch(異常對(duì)象聲明1)
{;//異常處理,異常信息等};
catch(異常對(duì)象聲明n)
{;//異常處理,異常信息等}
在同一個(gè)try-catch語(yǔ)句中可以有多個(gè)catch子句,如果某一catch語(yǔ)句指定的類型和它之前的catch語(yǔ)句指定的類型一致或者由此類型派生而來,會(huì)發(fā)生錯(cuò)誤,因此尋找異常的處理是按照catch子句出現(xiàn)的順序逐一檢查。在catch語(yǔ)句中,異常對(duì)象聲明是可選的,如果catch子句使用時(shí)不帶任何參數(shù),它可以捕捉任何類型的異常,這樣的catch語(yǔ)句稱為通用catch語(yǔ)句,等同于catch(System.Exception)。Try語(yǔ)句中只能存在一條通用catch語(yǔ)句,而且必須是try語(yǔ)句的最后一條catch語(yǔ)句。
下面給出實(shí)例:例5-12,來介紹try-catch語(yǔ)句的使用。例5-12
usingSystem;
publicclasstrycatchTest{
staticvoidMain(){
try{
intx,y,z;
Console.WriteLine("請(qǐng)輸入兩個(gè)數(shù)據(jù)分別賦值給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());}}}
運(yùn)行結(jié)果:
上面的結(jié)果是,首先輸入數(shù)字10,然后回車輸入5,得到正確的運(yùn)算結(jié)果。
如果,在輸入x和y值時(shí),輸入10后,按空格再輸入5,則引發(fā)FormatException異常,出現(xiàn)下面的提示:
如果首先輸入數(shù)字時(shí),然后回車輸入數(shù)字0,引發(fā)了DivideByZeroException異常,如下所示:
若將上例中的第二個(gè)catch語(yǔ)句和第三個(gè)交換位置,編譯時(shí)會(huì)出現(xiàn)如下錯(cuò)誤。
2、try-finally
Finally塊用于清除在try塊中分配的任何資源。無(wú)論是程序正常執(zhí)行或是執(zhí)行了break,continue或goto語(yǔ)句,還是把異常處理傳遞到try塊語(yǔ)句之外,都必須執(zhí)行finally塊中的語(yǔ)句。Finally塊語(yǔ)句中不允許出現(xiàn)return語(yǔ)句。
這種語(yǔ)句的形式如下:try{;//可能引發(fā)異常的語(yǔ)句}finally
{;//包含異常處理程序和清理代碼}
若將上面例5-12中的catch塊語(yǔ)句全部去掉,然后在try塊語(yǔ)句下面輸入如下語(yǔ)句:finally{
Console.WriteLine("thankyou!");
}運(yùn)行程序,輸入數(shù)字10,然后回車輸入0,會(huì)輸出如下結(jié)果:
從結(jié)果中可見,運(yùn)行后引發(fā)了DivideByZeroException異常,盡管捕捉了異常,仍然會(huì)執(zhí)行包含在finally塊中的輸出語(yǔ)句,即Console.WriteLine("thankyou!")語(yǔ)句。
3、try-catch-finally
try-catch-finally語(yǔ)句可以看成是try-catch和try-finally語(yǔ)句的組合,格式如下:try
{;//可能引發(fā)異常的語(yǔ)句}catch(異常對(duì)象聲明1)
{;//異常處理,異常信息等};
catch(異常對(duì)象聲明n)
{;//異常處理,異常信息等}finally
{;//包含異常處理程序和清理代碼}
try-catch-finally語(yǔ)句的通常用法是在try塊中獲取并使用資源,在catch塊中處理異常情況,在finally塊中釋放資源。
下面,在例5-12中,在catch塊語(yǔ)句后加入如下語(yǔ)句:finally{
Console.WriteLine("thankyou!");}
運(yùn)行程序,輸入數(shù)字10,然后回車輸入0,會(huì)輸出如下結(jié)果:
從結(jié)果中可以看到,在catch塊語(yǔ)句中處理了引發(fā)的DivideByZeroException異常,并且執(zhí)行了finally塊中的輸出語(yǔ)句。除了使用預(yù)定義的異常類型外,用戶還可以自定義異常類,以滿足自己的具體需要。用戶自定義異常類,一般從ApplicationException類派生,因?yàn)樵擃愑捎脩舫绦蛞l(fā),而不是公共語(yǔ)言運(yùn)行庫(kù)引發(fā)。
友情提示:本文中關(guān)于《基于.NET的Web程序設(shè)計(jì)知識(shí)點(diǎn)總結(jié)》給出的范例僅供您參考拓展思維使用,基于.NET的Web程序設(shè)計(jì)知識(shí)點(diǎn)總結(jié):該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請(qǐng)聯(lián)系我們及時(shí)刪除。