ASP.NET最佳策略第零章:部分问题讲解0.1用gridview自带的功能进行编辑和更新publicpartialclassDefault:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){if(!this.IsPostBack){binddata();}}privatevoidbinddata(){GridView1.DataSource=ConnDB.GetDataTable();GridView1.DataBind();}//当点更新时触发protectedvoidGridView1_RowUpdating(objectsender,GridViewUpdateEventArgse){TextBoxTextBox_id=(TextBox)(GridView1.Rows[e.RowIndex].Cells[0].Controls[0]);inttid=int.Parse(TextBox_id.Text);stringuname=((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text;}//当点编辑时触发protectedvoidGridView1_RowEditing(objectsender,GridViewEditEventArgse){GridView1.EditIndex=e.NewEditIndex;//GridView1.EditIndex设置或获取编辑行的索引binddata();//TextBoxtext=(TextBox)(GridView1.Rows[e.NewEditIndex].Cells[0].Controls[0]);//text.Enabled=false;}//当点取消时触发protectedvoidGridView1_RowCancelingEdit(objectsender,GridViewCancelEditEventArgse){GridView1.EditIndex=-1;//让gridview的编辑行都处于非编辑状态binddata();}}classConnDB{//返回DataTable(内存表)的方法publicstaticDataTableGetDataTable(){stringconnstr=server=.;database=mvcdb;uid=sa;pwd=sadamu;SqlConnectionconn=newSqlConnection(connstr);conn.Open();SqlCommandcmd=newSqlCommand(select*fromusers,conn);SqlDataAdapterda=newSqlDataAdapter(cmd);DataTabledt=newDataTable();da.Fill(dt);returndt;}}0.2索引器索引器是一种特殊的属性,可以把它添加到一个类中,以提供类似数组的访问,比如可以访问私有的数组classProgram{staticvoidMain(string[]args){Personper=newPerson();per[0]=张三;//赋值per[1]=李四;per[2]=王五;per[3]=赵六;per[4]=田七;stringaa=per[4];//取值stringbb=per[3];}}classPerson{privatestring[]all_students=newstring[5];publicstringthis[intindex]{get{if(index0||index=this.all_students.Length){Console.WriteLine(索引无效);returnnull;}returnall_students[index];//返回请求的数据}set{//验证索引访问if(index0||index=this.all_students.Length){Console.WriteLine(索引无效);return;//表示失败}this.all_students[index]=value;//向数组加载数据}}}0.3排序(实现接口)IComparable和IComparerT接口的应用实现IComparable接口,只能按一种方式进行排序classProgram{staticvoidMain(string[]args){Personp1=newPerson(zhangsan,11);Personp2=newPerson(lisi,44);Personp3=newPerson(wangwu,33);ArrayListalls=newArrayList();alls.Add(p1);alls.Add(p2);alls.Add(p3);alls.Sort();}}classPerson:IComparable{publicstringname;publicintage;publicPerson(stringname1,intage1){name=name1;age=age1;}publicintCompareTo(objectobj){if(!(objisPerson))thrownewException(只能与Person对象比较);Personother=objasPerson;returnthis.age.CompareTo(other.age);}}实现接口IComparerT,可以按多种方式排序classProgram{staticvoidMain(string[]args){Personp1=newPerson(zhangsan,111);Personp2=newPerson(lisi,22);Personp3=newPerson(wangwu,33);ListPersonpersons=newListPerson();persons.Add(p1);persons.Add(p2);persons.Add(p3);persons.Sort(newCompareByage());Console.ReadLine();}}classPerson{publicstringname;publicintage;publicPerson(stringname1,intage1){name=name1;age=age1;}}classCompareByage:IComparerPerson{publicintCompare(Personx,Persony){return(x.age.CompareTo(y.age));}}classCompareByName:IComparerPerson{publicintCompare(Personx,Persony){return(x.name.CompareTo(y.name));}}0.4WebForm原理0.4.1服务器和客户端计算机可以分成两种类型:服务器和客户端。向其他计算机提供服务(如Web服务器或FTP服务器)的计算机是服务器。而连接到服务器上获取服务的计算机称为客户端0.4.2Web窗体WebForm又被成为Web窗体,主要用来根据特定的信息生成动态的页面。web窗体包含两个页面文件:aspx前台页面和cs后台页面文件。通过反编译器Reflector我们可以看到在Dll程序集中前台页面和后台页面分别生成了两个不同的类,而且前台页面aspx类继承于后台页面CS类。说明:cs页面类继承自System.Web.UI.Page类,一般和文件同名,如果遇见关键字的情况才会自动使类名前加个'_',例如:_Default。formid=form1runat=serverdiv%=this.GetType()%/div/formASP.NETWebForms的事件概念和传统的基于客户端程序的事件概念有很大的区别。造成这些区别的主要原因是它们的事件触发位置和处理位置不同。基于客户端程序的事件在本地触发,并在本地处理。而ASP.NET的事件触发和事件处理的地点是分离的,大多数事件是在客户端触发,然而却在服务器端处理。比如Default.aspx页面,.cs可能生成一个叫_Default的类或者叫Default的类而.aspx会生成一个叫asp_Default的类,这个类继承自_Default类/Default类第一章:LINQ(上)--语法查询1.1LINQ简介1.1.1什么是LinqLINQ(LanguageIntegratedQuery)即语言集成查询,是.NETFramework3.5以上的版本支持的新技术。Linq所在命名空间:usingSystem.Linq;LINQ为C#提供了有编程语言集成的查询语法,可以使用相同的语法访问不同的数据源。LINQ按查询访问分以下四部分:操作领域说明LINQtoSQL可以查询基于关系数据库(主要是sqlserver),用于对数据库进行查询、插入、修改、删除、排序、聚合LINQtoObjects可以查询IEnumerable和IEnumerableT集合,即查询任何可枚举的集合,如数组(array)Arraylist、泛型集合(ListT和DictionaryT)。LINQtoDataSet可以查询Dataset中数据,并对数据进行检索、过滤、排序LINQtoXML主要负责XML的查询LINQ的初步体验如:在1-10的10个数中,查询小于6的。Listintlist=newListint(){1,2,3,4,5,6,7,8,9,10};varresult=fromiinlistwherei6selecti;LINQ按方式分为:1)方法语法2)查询语法Var是推断关键字!!根据右边的赋值,推断粗变量的数据类型1.1.2Linq结构图1.1.3为什么需要LinqSQL编码体验落后没有智能感应没有严格意义上的强类型和类型检查Linq语法通用:传统的SQL语句针对不同数据源需要不同的语法,如操作sqlserver数据库用T-SQL,而操作XML用另一种语法。但LINQ用同一种语法,可以操作不同的数据源,这个数据源不仅包括各种主流数据库,而且可以操作对象,内存数据DataSet、数据集合1.1.4再次体验LINQclassProgram{staticvoidMain(string[]args){varpersons=newListPerson{newPerson(){Name=张某,Sex=男,Province=北京市,City=东城区},newPerson(){Name=李某,Sex=男,Province=河北省,City=唐山市},newPerson(){Name=王某,Sex=女,Province=广东省,City=深圳市},newPerson(){Name=周某,Sex=男,Province=湖北省,City=武汉市},newPerson(){Name=程某,Sex=女,Province=湖t北省,City=武汉市},newPerson(){Name=曹某,Sex=男,Province=湖南省,City=娄底Ì市},newPerson(){Name=季某,Sex=女,Province=湖北省,City=黄石市}};}}classPerson{publicstringName{get;set;}publicstringSex{get;set;}publicstringProvince{get;set;}}方法1:foreach、forPersonps;stringcitytxt=武汉市;foreach(Personpinpersons){if(p.City==citytxt){ps=p;}}方法2:LINQ的方法查询