暑假ASP.NET学习笔记——7月24号

来源:互联网 发布:王牌对王牌网络直播 编辑:程序博客网 时间:2024/04/30 09:01

DataGrid控件进行多页显示时,如果为多页中的最后一页,则在删除该页最后一条记录时,会出现异常,需要手动修改当前页的索引来改变,不过如果进行多页显示时,当前页为最后一页,并且是仅有的一页,则删除时,不会出现异常,不能进行手动修改其页面索引,否则会出错。例子:

// 判断是否为多页的最后一页(页数必须>=2

if (dgdFlight.CurrentPageIndex == dgdFlight.PageCount-1 &&dgdFlight.CurrentPageIndex != 0)

        {

             // 如果页数为1,则进行该处理时,会使当前页为-1,出现异常

             // 所以必须让当前页的索引>=2  

            if(e.Item.ItemIndex == 0)

            {

               dgdFlight.CurrentPageIndex -= 1;

            }

        }

// 查找满足的列,进行删除,切不可直接使用e.Item.ItemIndex;这个是判断当前页的项目数,即如果总过有四条记录,而当前页的记录为2,则索引表示的是当前页的索引,即最大为1

myDS.tabFlightsRowtabFlgRow = ds.tabFlights.FindByFlightCode( e.Item.Cells[3].Text );

  ds.tabFlights.RemovetabFlightsRow(tabFlgRow);

dgdFlight.EditItemIndex = -1;

DataReader实现了两接口的功能,分别为:IDataReaderIDataRecord,其中IDataReader接口提供的方法和属性允许我们在结果集之间移动和查询DataReader的状态,而IDataRecoder接口提供的方法和属性是为了存取DataReader结果集的数据。我们可以利用多态实现特定的功能

DataReader.RecordsAffected属性表示的由于SQL语句的执行,受影响的行数,值为-1,表示Select语句被执行了

当 SET FMTONLY 为 ON 时,将不对行进行处理,也不将行作为请求的结果发送到客户端。SET FMTONLY 的设置是在执行或运行时设置,而不是在分析时设置。简单的说SETFMTONLY ON的功能是让Select只返回列的信息,而不返回行中的具体数据,SET FMTONLY OFF是正常查询

对于DataReader使用的连接,如果DataReader使用过后没有关闭,则其他的对象不能使用该连接,所以在DataReader对象完成任务后,应尽早关闭它

用DataReader读取数据时,可以先将数据存储到缓存(如一个临时数组)中,在DataReader关闭后再对数据进行处理,这样可以减少阻塞连接(DataReader使用连接时,其他对象不能使用,即为阻塞连接)的时间。

DataReader对象返回后,它们就定位在第一个结果集上,这个和Read方法不同,要记住,所以访问多结果集时,采用do-while而不是while-do形式,这点要和Read方法区分开来

GetOrdianl函数是在DataReader通过类型安全访问数据时,常用到的函数

ArrayListAdd函数对于引用类型,传递的是参数的引用,所以不要对同一个对象执行重复的Add操作,这样会造成Add函数中的值都为最后一次Add进去的对象值

cmd.CommandType = System.Data.CommandType.TableDirect;这个操作在Sql中是不可行的,在OleDb中可行

对于CommandBehavior的值为SequentialAccess的前提下,调用DataReader的ExecuteReader时,可能会引发该异常。注意:当声明为这种模式的行为时,DataReader希望按照次序访问列,也即是说如果访问了第四列,就不能再访问第三列,这可能会引发一个异常:Invalid attemp to read from column ordinal3.With Commandbehavior.SequentialAccess,youmay only read from column ordinal5 or grater

类型安全访问和非类型安全访问,例子:GetSqlInt32()和GetInt32()函数,前者是非类型安全访问(SqlClient访问),后者是类型安全访问(OleDb和Sql均可)

对于DataRow和DataColumn以及DataTable。其中DataTable中的模式通过DataColumn定义,即DataColumn搭建了框架,而填充数据通过DataRow。例子:

DataRow dr = DataTable.NewRow();dr继而为各列进行赋值,然后调用DataTable.Rows.Add(dr);将NewRow创建的列添加到Rows集合中

    记住DataRow的构造函数是protected级别的,如果要新建行,需要DataTalbe.NewRow()函数,而不是new DataRow()

    创建DataGrid的删除按钮操作时,选择ButtonColumn选项,而进行更新操作时,选择EditCommandColumn选项

    Request和Response对象,其中Request主要作用是从客户端获取数据,就是说只要想从客户端获取页面获取有关信息,就通过Request对象进行获取,Response对象的作用是向客户端显示数据。理解时要将aspx网页转换成.html,每一个aspx网页都隐含有一个Submit按钮,响应submit按钮

    表单的提交过程分析:

浏览器并不是将所有的表单控件全部发送到服务器的,而是会查找所有的【成功控件】,只将这些成功控件的数据发送到服务端, 什么是成功控件呢?
简单地来说,成功控件就是:每个表单中的控件都应该有一个name属性和”当前值“, 在提交时,它们将以name=value 的形式做为提交数据的一部分。
对于一些特殊情况,成功控件还有以下规定:
1. 控件不能是【禁用】状态,即指定【disabled="disabled"】。即:禁用的控件将不是成功控件。
2. 如果一个表单包含了多个提交按键,那么仅当用户点击的那个提交按钮才算是成功控件。
3. 对于checkbox控件来说,只有被用户勾选的才算是成功控件。
4. 对于radio button来说,只有被用户勾选的才算是成功控件。
5. 对于select控件来说,所有被选择的选项都做为成功控件,name由select控件提供。
6. 对于file上传文件控件来说,如果它包含了选择的文件,那么它将是一个成功控件。
此外,浏览器不会考虑Reset按钮以及OBJECT元素。

注意:
1. 对于checkbox, radio button来说,如果它们被确认为成功控件,但没有为控件指定value属性, 那么在表单提交时,将会以"on"做为它们的value
2. 如果在服务端读不到某个表单控件的值,请检查它是否满足以上规则。

提交方式:在前面的示例代码中,我为form指定了method="post",这个提交方法就决定了浏览器在提交数据时,通过什么方式来传递它们。
如果是【post】,那么表单数据将放在请求体中被发送出去。
如果是【get】,那么表单数据将会追加到查询字符串中,以查询字符串的形式提交到服务端。
建议:表单通常还是以post方式提交比较好,这样可以不破坏URL,况且URL还有长度限制。

数据的编码:前面我将浏览器的请求细节用Fiddler做了个截图,从这个图中我们可以看到:控件输入的内容并不是直接发送的, 而是经过一种编码规则来处理的。目前基本上只会只使用二种编码规则:application/x-www-form-urlencoded 和multipart/form-data , 这二个规则的使用场景简单地说就是:后者在上传文件时使用,其它情形则使用前者(默认)。

    用DataList进行编辑操作(编辑、更新、取消和删除)时,如果用Button,必须在<% @Page %>中添加EnableViewState="false",不然用Button会出错,不过如果添加的是(EnableEventValidation="false",虽然不会出错,但是点击按钮时,不会响应消息。还有如果用的是LinkButton,则不必进行此设置,切记。还有如果Page_Load函数中,有IsPostBack操作,则也不用加EnableViewState,否则会出错,更新和取消操作不能进行,即:解决用Button的问题,只能采用IsPostBack或EnableViewState这两个中的一个,不能同时使用

 

原创粉丝点击