600 likes | 754 Views
《ASP.NET 程序设计 》. 第7章 深入进行数据库编程. 讲解提纲. 7.1 DataGrid 控件再探讨 7.2 使用 DataList 控件存取数据库 7.3 使用 Repeater 控件存取数据库 7.4 使用含有参数的 SQL 语句 7.5 对多个表进行操作 7.6 存取 SQL Server 数据库 7.7 DataSet 对象再探讨 7.8 综合示例. 本章要点. 使用 DataGrid 控件分页、排序、定制列、自定义列 使用 DataList 控件显示和编辑数据 使用 Repeater 控件显示数据
E N D
讲解提纲 • 7.1 DataGrid控件再探讨 • 7.2 使用DataList控件存取数据库 • 7.3 使用Repeater控件存取数据库 • 7.4 使用含有参数的SQL语句 • 7.5 对多个表进行操作 • 7.6 存取SQL Server数据库 • 7.7 DataSet对象再探讨 • 7.8 综合示例
本章要点 • 使用DataGrid控件分页、排序、定制列、自定义列 • 使用DataList控件显示和编辑数据 • 使用Repeater控件显示数据 • 使用SQL参数查询语句 • 对多个表进行操作 • 连接SQL Server数据库的语句 • 手工建立DataSet对象,利用DataSet对象对数据库进行操作
7.1 DataGrid控件再探讨 • 分页显示数据 • 排序 • 定制列 • 链接到详细页 • 自定义列
7.1.1 分页显示数据 • 在DataGrid控件中添加如下属性: • AllowPaging="True" '表示允许分页显示 • PageSize=“整数值” '每页显示多少条记录 • OnPageIndexChanged=“事件过程” '切换到另一页时的事件过程 • 利用PagerStyle属性设置分页导航栏的样式: • PagerStyle-Mode=“ NextPrev | NumericPages” • PagerStyle-HorizontalAlign="Left | Right |center" • PagerStyle-PrevPageText=“字符串” • PagerStyle-NextPageText=“字符串” • 在事件过程中只要令DataGride控件的CurrentPageIndex属性为选定的页,然后重新绑定数据即可
分页显示数据示例 add.aspx
7.1.2 对数据进行排序 • 要进行排序,必须要在DataGrid控件中添加如下属性: • AllowSorting="True" '表示允许排序 • OnSortCommand= "事件过程" '排序对应的事件过程 • 排序的中心思想是当单击DataGrid某一列的标题时,就将这一列的字段名称赋值给DataSet对象默认视图的Sort属性,然后就可以按该列排序了。 • DS.Tables("link").DefaultView.Sort=SortField • MyDataGrid.DataBind()
排序的具体方法 • 首先在DataGrid控件中添加相应属性。 • 其次一个页面级变量SortField,用来存放排序字段。 • 启动页面时可以令SortField为默认的排序字段link_id,然后绑定数据。 • 当客户选择了排序的字段后,就令SortField为新的排序字段,然后绑定数据。
对数据进行排序示例 7-2.aspx
7.1.3 定制列 • 要自己定制列,首先需要在DataGrid控件中添加如下属性 • AutoGenerateColumns="False" • 此外,还需要自己添加BoundColumn、HyperLinkColumn列。 • 对于定制列,只要修改DataGrid控件就可以了,基本上不用修改
定制列示例 7-3.aspx
7.1.4 链接到详细页 • 如果一个数据表有很多字段,通常做法是只显示若干重要字段,然后单击一个“详细”超链接,就可以打开一个详细页面,在详细页面中显示所有字段。 • 要达到以上目的,也只要利用7.1.3节中讲到的HyperLinkColumn列,只不过链接到一个新的页面即可。
链接到详细页示例 7-4.aspx
详细页示例 7-5.aspx
7.1.5 自定义列 • 事实上,还可以利用TemplateColumn更加自由的定义每一列。 • <asp:TemplateColumn > • <ItemTemplate> • 服务器控件 • </ItemTemplate> • <EditItemTemplate> • 服务器控件 • </EditItemTemplate> • </asp:TemplateColumn>
自定义列示例 • 分步讲解: • 第1步:在DataGrid控件中对“网站简介”和“网站评分”两列使用自定义列。 • 第2步:在更新事件过程中获取文本框控件中和下拉列表框控件中的值,并进行更新。 • 说明; • 其它部分同以前示例
第1步:DataGrid控件部分 7-6.aspx
第2步:更新事件过程部分 7-6.aspx
7.2 使用DataList控件存取数据库 • DataGrid控件只能以表格形式显示数据,但是DataList控件就可以以更自由的方式显示数据,比如可以在1行显示多条记录。 • 不过它的功能没有DataGrid控件强大,如不支持分页和排序等。
7.2.1 DataList控件简介 • <asp:DataList id="控件名称" • RepeatDirection="Vertical | Horizontal,表示垂直显示还是水平显示" • RepeatColumns="整数值,表示控件中显示的列数" • RepeatLayout="Table | Flow,表示是否以表格的形式显示数据" • OnEditCommand="单击编辑按钮时的事件名称" • OnUpdateCommand="单击更新按钮时的事件名称" • OnCancelCommand="单击取消按钮时的事件名称" • OnDeleteCommand="单击删除按钮时的事件名称" • OnItemCommand="单击其它按钮时的事件名称" • DataKeyField="关键字段,类似于数据库中的主键" • runat="server" /> • ……模板列 • </asp:DataList>
DataList控件中的模板列 • ItemTemplate • AlternatingItemTemplate • SeparatorTemplate • SelectedItemTemplate • EditItemTemplate • HeaderTemplate • FooterTemplate
7.2.2 查询记录 • 查询记录的步骤和DataGrid控件几乎一致。 • 区别只是声明控件的语法部分。
查询记录示例 7-7.aspx
7.2.3 选择记录 • 在DataList控件中可以使用SelectedItemTemplate模板列设定选中项的内容和样式。 • 步骤: • 一般需要添加一个LinkButton控件; • 并且添加SelectedItemTemplate模板; • 并设置OnItemCommand属性对应的事件过程; • 在事件过程中设置SelectedIndex属性为选中项,然后重新绑定数据即可。
第1步:DataList控件部分 7-8.aspx
第2步:事件过程部分 7-8.aspx
7.2.4 更新和删除记录 • 利用DataList控件也可以更新和删除记录,此时它和DataGrid控件的操作非常类似。 • 它需要在EditItemTemplate列中自己定义编辑时的内容和样式; • 还要添加OnEditCommand、OnUpdateCommand、OnCancelCommand、OnDeleteCommand事件属性,分别对应单击编辑、更新、取消和删除按钮时的事件过程; • 同时还要利用DataKeyField属性设置关键字段。 • 在ItemTemplate和EditItemTemplate列中要分别添加几个LinkButton控件,当单击这些按钮时就会触发相应的事件过程。
第1步:DataList控件部分 7-9.aspx
第2步:更新事件过程 7-9.aspx
7.3 使用Repeater控件存取数据库 • Repeater控件也可以用来绑定数据库,它和DataList控件非常相似,但是有几个区别: • (1)DataList控件显示时会把每一条记录放在一个表格单元内(可以在浏览器中查看源代码),而Repeater控件就会严格按照用户的定义显示数据。 • (2)DataList控件支持更新和删除记录,而Repeater控件则只支持查询记录。 • (3)DataList控件可以在1行显示若干条记录,而Repeater控件1行只能显示1条记录。 • 总的来说,Repeater控件显示更自由,但是功能最简单。
7.3.1 Repeater控件简介 • 语法如下: • <asp:Repeater id="控件名称" OnItemCommand="单击其中按钮时的事件名称" runat="server" /> • 模板列 • </asp:DataList> • 模板列 • ItemTemplate • AlternatingItemTemplate • SeparatorTemplate • HeaderTemplate • FooterTemplate
7.3.2 查询记录 • 数据的绑定和DataList类似 • 关键是声明DataList控件的部分
查询记录示例 7-10.aspx
7.3.3 选择记录 • Repeater控件不仅可以用来查询记录,其实也可以其中添加LinkButton控件,单击该按钮就可以执行相应的事件过程,这一点和7.2.3有些相似。 • 首先在模板列中添加一个LinkButton控件,然后要设置OnItemCommand属性对应的事件过程。 • 当单击该按钮时,在事件过程中进行有关操作,然后重新绑定数据即可
选择记录示例—控件部分 7-11.aspx
选择记录示例—选择过程部分 7-11.aspx
7.4 使用含有参数的SQL语句 • 下面就是一个最简单的参数化SQL语句,其中包含了1个参数@sitename。: • "Select * From link Where sitename = @sitename" • 当需要给该参数赋值时,可以使用Command对象建立参数对象,然后再赋值。 • cmd.Parameters.Add(New OleDbParameter("@sitename", OleDbType.Char,20)) • cmd.Parameters("@sitename").Value="搜狐"
含有参数的SQL语句示例 7-12.aspx
7.5.1 组合查询 • 其实,只要使用组合查询的SQL语句就可以了,其它和6-5.aspx、6-6.aspx都一样。 • 比如,现在要显示网站编号ID、网站名称sitename、年份fyear、收入income四个字段,并且要按网站名称和年份排序,则必须将Select语句写成如下形式: • "Select link.link_id,link.sitename,finance.fyear,finance.income From link,finance Where link.link_id=finance.link_id Order By link.sitename,finance.fyear"
7.5.2 对多个表进行更新和删除操作 • 首先说明,Select语句可以使用多个表,但是Insert、Update和Delete语句只能对1个表进行操作。 • 比如,当需要同时删除两个表中的数据的时候,就需要大家手工一个表一个表进行
对多个表进行操作示例 7-13.aspx
7.6 存取SQL Server数据库 • SQL数据库是微软推出的大型网络数据库,效率更高,运行更稳定。 • 对于大型网站,还是建议采用SQL数据库。
7.6.1 建立SQL Server数据库 • 建立一个数据库wwwlink,然后再建立表link,字段结构如图7-15所示。然后再为其添加用户test,密码是1234。
7.6.2 存取SQL Server数据库 • 使用第一套类库,数据库连接字符串为: • "Provider=SqlOleDb.1;Data Source=localhost;initial Catalog=wwwlink;Uid=test;Pwd=1234" • 如果使用第二套类库,就需要在页面中首先导入相应类: • <%@ Import Namespace="System.Data" %> • <%@ Import Namespace="System.Data.SqlClient" %> • 建立Connection对象的数据库连接字符串修改为: • "Server=localhost;Database=wwwlink;Uid=test;Pwd=1234“ • 其它部分和读取Access数据库基本一致。 • 特别注意: • 日期字段值两边不用#号,而改用引号。
7.7 DataSet对象再探讨 • DataSet对象可以由数据库、XML或手工建立,它是和数据源断开的。 • DataSet对象其实就像内存中的数据库,具有表、行、列、主键、关系等。 • 它需要借助DataAdapter对象将更新反映到数据源中。
7.7.1 建立DataSet对象 • 填充DataSet对象的几种方法: • 由数据库中填充 • 从XML文件中填充 • 完全手工填充
手工建立DataSet对象示例(1) 7-15.aspx
手工建立DataSet对象示例(2) 7-15.aspx