ASPNET最佳策略word.docx_第1頁
ASPNET最佳策略word.docx_第2頁
ASPNET最佳策略word.docx_第3頁
ASPNET最佳策略word.docx_第4頁
ASPNET最佳策略word.docx_第5頁
已閱讀5頁,還剩81頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ASP.NET最佳策略第零章:部分問題講解0.1用gridview自帶的功能進(jìn)行編輯和更新public partial class Default : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) if(!this.IsPostBack) binddata(); private void binddata() GridView1.DataSource = ConnDB.GetDataTable(); GridView1.DataBind(); /當(dāng)點(diǎn)更新時(shí)觸發(fā) protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) TextBox TextBox_id =(TextBox)(GridView1.Rowse.RowIndex.Cells0.Controls0); int tid = int.Parse(TextBox_id.Text); string uname=(TextBox)(GridView1.Rowse.RowIndex.Cells1.Controls0).Text; /當(dāng)點(diǎn)編輯時(shí)觸發(fā) protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) GridView1.EditIndex = e.NewEditIndex;/GridView1.EditIndex設(shè)置或獲取編輯行的索引 binddata(); /TextBox text = (TextBox)(GridView1.Rowse.NewEditIndex.Cells0.Controls0); /text.Enabled = false; /當(dāng)點(diǎn)取消時(shí)觸發(fā) protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) GridView1.EditIndex = -1;/讓gridview的編輯行都處于非編輯狀態(tài) binddata(); class ConnDB /返回DataTable(內(nèi)存表)的方法 public static DataTable GetDataTable() string connstr = server=.;database=mvcdb;uid=sa;pwd=sadamu; SqlConnection conn = new SqlConnection(connstr); conn.Open(); SqlCommand cmd = new SqlCommand(select * from users,conn); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); return dt; 0.2索引器 索引器是一種特殊的屬性,可以把它添加到一個(gè)類中,以提供類似數(shù)組的訪問,比如可以訪問私有的數(shù)組class Program static void Main(string args) Person per = new Person(); per0 = 張三; /賦值 per1 = 李四; per2 = 王五; per3 = 趙六; per4 = 田七; string aa = per4; /取值 string bb = per3; class Person private string all_students = new string5; public string thisint index get if (index = this.all_students.Length) Console.WriteLine(索引無效); return null; return all_studentsindex;/返回請(qǐng)求的數(shù)據(jù) set /驗(yàn)證索引訪問 if(index=this.all_students.Length) Console.WriteLine(索引無效); return;/表示失敗 this.all_studentsindex=value;/向數(shù)組加載數(shù)據(jù) 0.3 排序(實(shí)現(xiàn)接口)IComparable和IComparer接口的應(yīng)用實(shí)現(xiàn)IComparable接口,只能按一種方式進(jìn)行排序class Program static void Main(string args) Person p1 = new Person(zhangsan,11); Person p2 = new Person(lisi, 44); Person p3 = new Person(wangwu, 33); ArrayList alls = new ArrayList(); alls.Add(p1); alls.Add(p2); alls.Add(p3); alls.Sort(); class Person : IComparable public string name; public int age; public Person(string name1, int age1) name = name1; age = age1; public int CompareTo(object obj) if (!(obj is Person) throw new Exception(只能與Person對(duì)象比較); Person other = obj as Person; return this.age.CompareTo(other.age); 實(shí)現(xiàn)接口IComparer,可以按多種方式排序 class Program static void Main(string args) Person p1 = new Person(zhangsan, 111); Person p2 = new Person(lisi, 22); Person p3 = new Person(wangwu, 33); List persons = new List(); persons.Add(p1); persons.Add(p2); persons.Add(p3); persons.Sort(new CompareByage(); Console.ReadLine(); class Person public string name; public int age; public Person(string name1, int age1) name = name1; age = age1; class CompareByage : IComparer public int Compare(Person x, Person y) return (x.age.CompareTo(y.age); class CompareByName: IComparer public int Compare(Person x, Person y) return (.CompareTo(); 0.4 Web Form原理0.4.1服務(wù)器和客戶端 計(jì)算機(jī)可以分成兩種類型:服務(wù)器和客戶端。向其他計(jì)算機(jī)提供服務(wù)(如Web服務(wù)器或FTP服務(wù)器)的計(jì)算機(jī)是服務(wù)器。而連接到服務(wù)器上獲取服務(wù)的計(jì)算機(jī)稱為客戶端0.4.2 Web窗體Web Form又被成為Web窗體,主要用來根據(jù)特定的信息生成動(dòng)態(tài)的頁面。web窗體包含兩個(gè)頁面文件:aspx前臺(tái)頁面和cs后臺(tái)頁面文件。通過反編譯器Reflector我們可以看到在Dll程序集中前臺(tái)頁面和后臺(tái)頁面分別生成了兩個(gè)不同的類,而且前臺(tái)頁面aspx類繼承于后臺(tái)頁面CS類。說明:cs頁面類繼承自System.Web.UI.Page類,一般和文件同名,如果遇見關(guān)鍵字的情況才會(huì)自動(dòng)使類名前加個(gè)_,例如:_Default。比如Default.aspx頁面,.cs可能生成一個(gè)叫_Default的類或者叫Default的類而.aspx會(huì)生成一個(gè)叫asp_Default的類,這個(gè)類繼承自_Default類/Default類 ASP.NET Web Forms的事件概念和傳統(tǒng)的基于客戶端程序的事件概念有很大的區(qū)別。造成這些區(qū)別的主要原因是它們的事件觸發(fā)位置和處理位置不同?;诳蛻舳顺绦虻氖录诒镜赜|發(fā),并在本地處理。而ASP.NET的事件觸發(fā)和事件處理的地點(diǎn)是分離的,大多數(shù)事件是在客戶端觸發(fā),然而卻在服務(wù)器端處理。 第一章:LINQ(上)-語法查詢1.1 LINQ簡介1.1.1什么是Linq u LINQ( Language Integrated Query )即語言集成查詢,是.NET Framework3.5以上的版本支持的新技術(shù)。u Linq所在命名空間:using System.Linq;u LINQ為C#提供了有編程語言集成的查詢語法,可以使用相同的語法訪問不同的數(shù)據(jù)源。 u LINQ 按查詢?cè)L問分以下四部分: 操作領(lǐng)域說明LINQ to SQL可以查詢基于關(guān)系數(shù)據(jù)庫(主要是sql server),用于對(duì)數(shù)據(jù)庫進(jìn)行查詢、插入、修改、刪除、排序、聚合LINQ to Objects可以查詢IEnumerable和IEnumerable集合,即查詢?nèi)魏慰擅杜e的集合,如數(shù)組(array)Arraylist、泛型集合(List和Dictionary)。LINQ to DataSet可以查詢Dataset中數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行檢索、過濾、排序LINQ to XML主要負(fù)責(zé) XML 的查詢LINQ的初步體驗(yàn) 如:在1-10的10個(gè)數(shù)中,查詢小于6的。 List list = new List() 1,2,3,4,5,6,7,8,9,10;var result = from i in list where i 6 select i;Var是推斷關(guān)鍵字!根據(jù)右邊的賦值,推斷粗變量的數(shù)據(jù)類型 LINQ按方式分為: 1)方法語法 2)查詢語法1.1.2 Linq結(jié)構(gòu)圖1.1.3 為什么需要Linqu SQL 編碼體驗(yàn)落后n 沒有智能感應(yīng)n 沒有嚴(yán)格意義上的強(qiáng)類型和類型檢查 Linq語法通用: l 傳統(tǒng)的SQL語句針對(duì)不同數(shù)據(jù)源需要不同的語法,如操作sqlserver數(shù)據(jù)庫 用T-SQL,而操作XML用另一種語法。l 但LINQ用同一種語法,可以操作不同的數(shù)據(jù)源,這個(gè)數(shù)據(jù)源不僅包括各種主流數(shù)據(jù)庫,而且可以操作對(duì)象,內(nèi)存數(shù)據(jù)DataSet、數(shù)據(jù)集合1.1.4 再次體驗(yàn)LINQ class Program static void Main(string args) var persons = new List new Person()Name=張某,Sex=男,Province=北京市,City=東城區(qū), new Person()Name=李某,Sex=男,Province=河北省,City=唐山市, new Person()Name=王某,Sex=女,Province=廣東省,City=深圳市, new Person()Name=周某,Sex=男,Province=湖北省,City=武漢市, new Person()Name=程某,Sex=女,Province=湖t北省,City=武漢市, new Person()Name=曹某,Sex=男,Province=湖南省,City=婁底市, new Person()Name=季某,Sex=女,Province=湖北省,City=黃石市 ; class Person public string Name get; set; public string Sex get; set; public string Province get; set; Person p1 = new Person Name=季某,Sex=女,Province=湖北省,City=黃石市;這是初始化對(duì)象的一種新方法,叫對(duì)象初始化器查詢泛型集合中所有City為武漢市的對(duì)象 ?方法1:foreach、for Person ps; string citytxt = 武漢市; foreach (Person p in persons) if (p. City = citytxt) ps = p; 方法2:LINQ的方法查詢IEnumerable persons2 = persons.Where(b = b.City = 武漢市);方法3:LINQ的表達(dá)式查詢Var test = from b in persons where b.City = 武漢市 select b;For、foreach、Linq比較查詢性能比較 linq方式性能最差。 foreach方法在查詢數(shù)據(jù)時(shí),依賴了Enumerator ,它的特點(diǎn)是不能像對(duì)于數(shù)組一樣使用索引,而只能將當(dāng)前項(xiàng)指針移動(dòng)到集合的第一個(gè)或下一個(gè)元素,這是它性能不是最優(yōu)的主要問題所在,性能次之 For對(duì)泛型集合的效率最高總結(jié) 在泛型集合如果數(shù)據(jù)量大,最好采用for循環(huán)查詢,數(shù)據(jù)量少或者不特別重視性能的話,用linq方式最佳,代碼優(yōu)雅且簡潔。1.2 LINQ表達(dá)式查詢1.2.1 八個(gè)子句介紹 Linq的查詢表達(dá)式包含8個(gè)子句(關(guān)鍵字)子句說明from子句指定查詢操作的數(shù)據(jù)源和范圍變量select子句指定查詢結(jié)果的類型和表現(xiàn)形式where子句篩選元素的邏輯條件,一般有邏輯運(yùn)算符(“與”、“或”)組成group子句對(duì)查詢結(jié)果進(jìn)行分組orderby子句對(duì)查詢結(jié)果進(jìn)行排序,可以為“升序”或“降序”Join子句連接多個(gè)查詢操作的數(shù)據(jù)源Let子句引入用于存儲(chǔ)查詢表達(dá)式中的子表達(dá)式結(jié)果的范圍變量。Into 子句提供一個(gè)臨時(shí)的標(biāo)識(shí)符。該標(biāo)識(shí)可以充當(dāng)對(duì)join、group或select子句的結(jié)果的引用。查詢表達(dá)式必須以from開頭、并必須以select或group子句結(jié)束。1.2.2 from子句指定查詢操作的數(shù)據(jù)源和范圍變量例子1:數(shù)據(jù)源是數(shù)組int nums= 1,2,3,4,5,6,7,8,9,10;var result = from v in nums where v 6 select v;說明:1) V為范圍變量,nums是數(shù)據(jù)源,其中范圍變量表示數(shù)據(jù)源中的每一個(gè)元素2) From子句:指定數(shù)據(jù)源和范圍變量 注意: From子句指定的數(shù)據(jù)源類型必須為IEnumerable、IEnumerable或者兩者的派生類型例子2:數(shù)據(jù)源是泛型集合 List list = new List() 000, 111, 222 ; var result = from aa in list where aa = 000 select aa;說明: 在from子句中,如果數(shù)據(jù)源(如List等)實(shí)現(xiàn)了IEnumerable,則編譯器可自動(dòng)推斷出范圍變量的數(shù)據(jù)類型例子3:數(shù)據(jù)源是非泛型集合 ArrayList alls = new ArrayList(); var personss = new ArrayList() new Person()Name=張某,Sex=男,Province=北京市,City=東城區(qū), new Person()Name=李某,Sex=男,Province=河北省,City=唐山市, new Person()Name=王某,Sex=女,Province=廣東省,City=深圳市, new Person()Name=周某,Sex=男,Province=湖北省,City=武漢市, new Person()Name=程某,Sex=女,Province=湖t北省,City=武漢市, new Person()Name=曹某,Sex=男,Province=湖南省,City=婁底市, new Person()Name=季某,Sex=女,Province=湖北省,City=黃石市 ; Var resut = from Person v in personss where v.Sex = 女 select v; foreach (var vv in resut) Console.WriteLine(vv.Name); 如果數(shù)據(jù)源是非泛型的IEnumerable類型,則必須顯示指定范圍變量的數(shù)據(jù)類型。例子4:復(fù)合from子句查詢 From子查詢分為:單個(gè)from子查詢:查詢表達(dá)式中只包含一個(gè)from子句。復(fù)合from子查詢:查詢表達(dá)式中包含2個(gè)或2個(gè)from子句,如查詢子數(shù)據(jù)源中的元素class Program static void Main(string args) List list1 = new List new User()id=1,name=zhangsan,email=, new User()id=2,name=lisi,email= ; List list2 = new List() new User()id=3,name=wangwu,email=, new User()id=4,name=zhaoliou,email= ; var result = from aa in list1 where aa.id 3 select aa; var result2 = from aa in list1 where aa.id 3 select new ,bb.email ; foreach (var vv in result2) Console.WriteLine(+n+vv.email); Console.ReadLine(); class User public int id get; set; public string name get; set; public string email get; set; 1.2.3 where子句篩選元素的邏輯條件,一般有邏輯運(yùn)算符(“與”、“或”)組成例子1:List list1 = new List new User()id=1,name=zhangsan,email=, new User()id=2,name=lisi,email=;var result = from aa in list1 where aa.id 1 & aa.email.Length 10 select aa;foreach (var vv in result) Console.WriteLine(+n+vv.email);Console.ReadLine();1.2.4 select子句指定查詢結(jié)果的類型和表現(xiàn)形式注意: LINQ查詢表達(dá)式必須以select子句或者group子句結(jié)束,否則會(huì)給出錯(cuò)誤提示例子1:var persons = new List new Person()Name=張某,Sex=男,Province=北京市,City=東城區(qū), new Person()Name=李某,Sex=男,Province=河北省,City=唐山市, new Person()Name=王某,Sex=女,Province=廣東省,City=深圳市, new Person()Name=周某,Sex=男,Province=湖北省,City=武漢市, new Person()Name=程某,Sex=女,Province=湖北省,City=武漢市, new Person()Name=曹某,Sex=男,Province=湖南省,City=婁底市, new Person()Name=季某,Sex=女,Province=湖北省,City=黃石市 ;var resultss = from vv in persons where vv.Sex = 女 select new Person Name = vv.Name, City=vv.City; foreach(Person p in resultss) Console.WriteLine(p.Name+p.City+p.Province); Console.ReadLine();說明: 使用select子句創(chuàng)建了一個(gè)類型為Person的一個(gè)序列(就是一個(gè)泛型集合的子集)1.2.5 group子句對(duì)查詢結(jié)果進(jìn)行分組var persons = new List new Person()Name=張某,Sex=男,Province=北京市,City=東城區(qū), new Person()Name=李某,Sex=男,Province=河北省,City=唐山市, new Person()Name=王某,Sex=女,Province=廣東省,City=深圳市, new Person()Name=周某,Sex=男,Province=湖北省,City=武漢市, new Person()Name=程某,Sex=女,Province=湖北省,City=武漢市, new Person()Name=曹某,Sex=男,Province=湖南省,City=婁底市, new Person()Name=季某,Sex=女,Province=湖北省,City=黃石 ;var resultss = from vv in persons group vv by vv.Sex; foreach(Person p in resultss.ElementAt(1) Console.WriteLine(p.Name+p.City+p.Province+p.Sex);Console.ReadLine();說明: 按性別分成2組,每組包含多個(gè)元素 Group后的vv是指查出的每個(gè)元素是person對(duì)象(vv改成vv.City試下)1.2.6 orderby子句對(duì)查詢結(jié)果進(jìn)行排序,可以為“升序”或“降序”var persons = new List new Person()Name=張某,Sex=男,Province=北京市,City=東城區(qū), new Person()Name=李某,Sex=男,Province=河北省,City=唐山市, new Person()Name=王某,Sex=女,Province=廣東省,City=深圳市, new Person()Name=周某,Sex=男,Province=湖北省,City=武漢市, new Person()Name=程某,Sex=女,Province=湖北省,City=武漢市, new Person()Name=曹某,Sex=男,Province=湖南省,City=婁底市, new Person()Name=季某,Sex=女,Province=湖北省,City=黃石 ; var resultss = from vv in persons orderby vv.Province select vv; foreach(Person p in resultss) Console.WriteLine(p.Name+p.City+p.Province+p.Sex); Console.ReadLine();1.2.7 into子句提供一個(gè)臨時(shí)的標(biāo)識(shí)符。該標(biāo)識(shí)可以充當(dāng)對(duì)join、group或select子句的結(jié)果的引用。(該標(biāo)識(shí)符存儲(chǔ)join、group或select子句的結(jié)果)var persons = new List new Person()Name=張某,Sex=男,Province=北京市,City=東城區(qū), new Person()Name=李某,Sex=、男,Province=河北省,City=唐山市, new Person()Name=王某,Sex=女,Province=廣東省,City=深圳市, new Person()Name=周某,Sex=男,Province=湖北省,City=武漢市, new Person()Name=程某,Sex=女,Province=湖北省,City=武漢市, new Person()Name=曹某,Sex=男,Province=湖南省,City=婁底市, new Person()Name=季某,Sex=女,Province=湖北省,City=黃石 ; Var resultss = from vv in persons group vv by vv.Sex into g where g.Count()3 /這句話可以刪除嗎? select g; foreach(Person p in resultss.ElementAt(0) Console.WriteLine(p.Name+p.City+p.Province+p.Sex); Console.ReadLine();1.2.8 join子句連接多個(gè)查詢操作的數(shù)據(jù)源Join子句可以實(shí)現(xiàn)3中聯(lián)結(jié)關(guān)系:1) 內(nèi)部聯(lián)接:元素的連接關(guān)系必須同時(shí)滿足被連接的2個(gè)數(shù)據(jù)源2) 分組聯(lián)接:含有into子句的join子句。3) 左外部聯(lián)接。內(nèi)部鏈接例子class Program static void Main(string args) List list1 = new List new ClassInfo()class_id=1,class_name=rj1001, new ClassInfo()class_id=2,class_name=rj1002, ; List list2 = new List new StuInfo()stu_id=1,stu_name=張三,cid=1, new StuInfo()stu_id=2,stu_name=李四,cid=2 ; /內(nèi)部聯(lián)接 var result = from stu in list2 where stu.cid = 1 join class1 in list1 on stu.cid equals class1.class_id select new stu.stu_name, class1.class_name ; /分組聯(lián)接 var result = from stu in list2 where stu.cid = 1 join class1 in list1 on stu.cid equals class1.class_id into kkk select new IDD=stu.cid, Name=stu.stu_name, ClassName =kkk.ToList() ;/左外鏈接var result = from stu in list2 where stu.cid = 1 join class1 in list1 on stu.cid equals class1.class_id into kkk from urrr in kkk.DefaultIfEmpty() select new IDD=stu.cid, Name=stu.stu_name, ClassName =kkk.ToList() ; class ClassInfo /班級(jí)信息 public int class_id get; set; public string class_name get; set; class StuInfo /學(xué)生信息 public int stu_id get; set; public string stu_name get; set; public int cid get; set; 1.2.9 let子句用于對(duì)范圍變量賦初值。var result = from stu in list2 let number = 1 /引入另一個(gè)范圍變量 where stu.cid = 1 select stu; 演示:LINQ操作Dataset的例子1.3 LINQ的應(yīng)用書上252頁: 實(shí)現(xiàn)把3個(gè)datatable連接起來查詢, DataTable datatable1 = new DataTable(); datatable1.AsEnumerable(); /用于將datatable轉(zhuǎn)換成可枚舉類型第一章:LINQ(中)-方法查詢1.1 委托和事件的回顧關(guān)于模版?做月餅的原理廚師手里拿著個(gè)木頭做的模子。上面刻著月餅的形狀,里面還刻有圖案,廚師把包好的月餅面團(tuán)壓進(jìn)模子里,壓平,然后把做好的月餅磕出來,一個(gè)月餅就做好了。 用這個(gè)模子可以快速做出無數(shù)個(gè)月餅,做出來的月餅,大小、花紋都一樣,只是顏色材料可能不一樣。1.1.1什么是委托我們都知道,C#中有“接口”這個(gè)概念,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論