第8章 使用数据访问控件 - 实训题

更新时间:2024-01-27 15:30:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第8章 数据库基础和数据访问控件

8.1 实训 使用数据访问控件查询数据库

8.1.1 实训目的

1) 通过上机操作熟练掌握GridView控件配合AccessDataSource控件操作数据库的基本方法。理解GridView控件的常用属性、事件和方法。

2) 掌握在AccessDataSource控件设置中直接使用SQL语句和LIKE运算符的技巧。理解设置GridView控件外观的基本技巧。

8.1.2 实训要求

设计一个ASP.NET网站,要求使用本章第4题创建的Access数据库,配合GridView控件、AccessDataSource控件实现对数据记录的多功能查询。页面装入时显示图8-1所示的界面,其中显示有当前数据表中所有记录,并添加有一个“总分”计算字段。在GridView的最后一行显示“数学”、“语文”、“英语”和“总分”字段的平均值。

图8-1 页面装入时显示全部记录 图8-2 按姓名进行模糊查询

在“查询依据”下拉列表框中选择“查询依据”为“学号”、“姓名”或“班级”后,在文本框内输入查询关键字,单击“查询”按钮可得到希望的查询结果,单击“显示全部”按钮可再次显示所有记录数据。要求使用“姓名”或“班级”进行查询时支持“模糊查询”方式,如图8-2所示在输入“姓名”关键字为“张”后单击“查询”按钮将得到所有姓名中包含有“张”的所有记录。

此外,要求当用户的查询返回结果集为空时,弹出信息框提示“未找到符合条件的记录!”;如果用户在没有输入查询关键字而直接单击“查询”按钮时,弹出信息框提示“查询关键字不能为空!”。

1

8.1.3 实训步骤

(1) 设计Web界面

新建一个ASP.NET网站,向页面中添加一个用于布局的HTML表格,向页面中添加必要的说明文字,添加一个下拉列表框控件DropDownList1,一个文本框控件TextBox1和2个按钮控件Button1、Button2。向表格中添加一个用于显示数据库数据的GridView1和4个AccessDataSource1~AccessDataSource4控件,分别用于按学号、姓名、班级查询记录的情况。

(2) 设置对象属性

设置下拉列表框DropDownList1的ID属性为DropType,设置文本框TextBox1的ID属性为TextKey,设置按钮控件Button1的ID属性为ButtonQuery,Text属性为“查询”。

选中AccessDataSource1,在其任务菜单中执行“配置数据源”命令,在打开对话框中单击“浏览”按钮,选择事先已存放在网站App_Data文件夹下的Student.mdb文件。

在“配置Select语句”对话框中选择“指定自定义SQL语句或存储过程”。单击“下一步”按钮打开图8-3所示的对话框,录入如下所示的SQL语句使返回记录集中包含一个“总分”计算字段。

SELECT uid,uname,usex,class,math,chs,en,(math+chs+en) as 总分 FROM [grade] WHERE ([uid] = ?)

图8-3 按学号查询的Where子句设置

单击“下一步”按钮,在打开的对话框中设置查询条件为uid列的数据等于控件TextKey的Text属性值。其他设置按屏幕提示完成即可。

AccessDataSource2、3的设置与AccessDataSource1基本相同,只是在设置WHERE子句时设置的查询条件不同,具体设置如图8-4和图8-5所示。注意,为了使程序支持“模糊查询”按姓名和班级查询时使用了LIKE运算符。

2

图8-4 按姓名查询的Where子句设置 图8-5 按班级查询的Where子句设置

AccessDataSource4的设置,只是去掉了WHERE子句部分,用于无条件返回所有记录。 (3) 编写程序代码

为了在GridView控件中显示中文的列标题,需要切换到Default.aspx页面的源视图,按如下所示修改GridView1控件的描述代码。

在实际应用中GridView控件的外观设置是通过使用主题、外观文件和CSS级联样式表技术进行设置的,由于篇幅有限这里只进行了基本的设置。

页面装入时执行的事件代码如下:

protected void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) {

DropType.Items.Add(\学号\ DropType.Items.Add(\姓名\ DropType.Items.Add(\班级\

GridView1.DataSource = AccessDataSource4; GridView1.DataBind();

//在Gridview1中显示所有记录

//向下拉列表框中添加供选项

3

}

TextKey.Focus(); }

//本框得到焦点

“查询”按钮被单击时执行的事件代码如下:

protected void ButtonQuery_Click(object sender, EventArgs e) {

if (TextKey.Text == \ {

Response.Write(\查询关键字不能为空!');\ return; }

switch (DropType.Text) {

case \学号\

GridView1.DataSource = AccessDataSource1; GridView1.DataBind(); break; case \姓名\

GridView1.DataSource = AccessDataSource2; GridView1.DataBind(); break; case \班级\

GridView1.DataSource = AccessDataSource3; GridView1.DataBind(); break; }

if (GridView1.Rows.Count == 0) {

Response.Write(\未找到符合条件的记录!');\ TextKey.Text = \

GridView1.DataSource = AccessDataSource4; GridView1.DataBind(); } }

//如果GridView包含的行数为0

//根据用户选项将GridView控件绑定到不同的数据源 //如果用户没有输入查询关键字

“显示全部”按钮被单击时执行的事件代码如下:

protected void ButtonShowAll_Click(object sender, EventArgs e) {

GridView1.DataSource = AccessDataSource4; GridView1.DataBind(); }

GridView控件中发生行数据绑定时执行的事件代码如下:

double sum1 = 0,sum2 = 0, sum3 = 0, sum4 = 0;

//在事件过程之外声明存储总和的变量

4

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) if (e.Row.RowIndex > -1) {

sum1 += Convert.ToDouble(e.Row.Cells[4].Text); sum2 += Convert.ToDouble(e.Row.Cells[5].Text); sum3 += Convert.ToDouble(e.Row.Cells[6].Text); sum4 += Convert.ToDouble(e.Row.Cells[7].Text); }

//e为引发行数据变化的对象,实际上就是GridView1 else if (e.Row.RowType == DataControlRowType.Footer) {

e.Row.Cells[3].Text = \平 均:\

e.Row.Cells[4].Text = ((double)(sum1 / GridView1.Rows.Count)).ToString(\ e.Row.Cells[5].Text = ((double)(sum2 / GridView1.Rows.Count)).ToString(\ e.Row.Cells[6].Text = ((double)(sum3 / GridView1.Rows.Count)).ToString(\ e.Row.Cells[7].Text = ((double)(sum4 / GridView1.Rows.Count)).ToString(\

}

//如果当前行是页脚 //累加第4列(数学)的总和

习题:

10. 使用DataList控件、FormView控件配合SqlDataSource控件,设计一个能操作SQL Server数据库的ASP.NET应用程序。具体要求如下:

程序启动后显示图8-22所示的界面,单击某记录前面的“删除”按钮可删除当前记录,单击“编辑”按钮,可跳转到图8-23所示的,由FormView控件构成的编辑页面,修改记录后单击“更新”链接按钮可更新数据并返回到网站首页,单击“取消”链接按钮将放弃修改,并返回网站首页。本题仍使用第6题创建的SQL Server数据库“addresslist”和“Tel”表。

图8-22 使用DataList控件显示数据

图8-23 通过FormView控件修改数据

解答:程序设计步骤如下。 (1) 设计Default.aspx页面

新建一个ASP.NET网站,向页面中添加一个DataList控件和一个SqlDataSource控件。

5

执行SqlDataSource控件“任务”菜单中的“配置数据源”命令,启动数据源配置向导。参照本章相关章节的介绍完成配置操作。配置完成后,数据源应能正确显示Tel表中所有数据记录。需要注意的是,本例设计使用代码方式执行删除记录的操作,更新数据将交给FormView控件完成,故Default.aspx页面中的SqlDataSource控件仅提供DataList控件中显示数据的支持,不必生成相关的Insert、Update和Delete命令。

执行DataList控件“任务”菜单中的“编辑模板”命令,选择ItemTemplate模板,按图8-24所示向模板中添加一个用于布局的HTML表格,并将默认纵向排列布局改为横向排列,向最前面2个单元格分别添加一个命令按钮控件Button1和Button2。

图8-24 编辑DataList控件的ItemTemplate模板

设置Button1的ID属性为ButtonDel,Text属性为“删除”,设置Button2的ID属性为ButtonEdit,Text属性为“编辑”。为了在DataList控件的ItemCommand事件中判断用户究竟是单击了哪个按钮,需要设置“删除”按钮的CommandName属性为“Del”,“编辑”按钮的编辑按钮的CommandName属性为“Edit”;设置2个按钮的CommandArgument属性均为“<%# Eval(\”(表示从数据源获取的当前记录的uid字段值)。

切换到HeaderTemplate模板,按图8-25所示设计DataList控件的列标题栏。

图8-25 编辑DataList控件的HerderTemplate模板

(2) 编写Default.aspx页面中相关代码

Default.aspx页面装入时执行的事件代码如下:

protected void Page_Load(object sender, EventArgs e) {

DataList1.Caption = \通 信 录\//设置DataList控件的标题 }

DataList控件中生成CommandEvent时执行的事件代码如下:

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) {

if (e.CommandName == \ {

//e表示激发ItemCommand事件的按钮,

//e. CommandArgument属性包含了当前记录的uid值 Response.Redirect(\ } else

//如果用户单击的是“删除”按钮

//如果用户单击的“编辑”按钮

6

{

//设置数据源的删除命令(设置删除记录的SQL语句) SqlDataSource1.DeleteCommand = \ e.CommandArgument + \ SqlDataSource1.Delete(); } }

//调用数据源的Delete()方法,即执行相应的SQL语句

(3) 设计Edit.aspx页面

向网站中添加一个新Web窗体,并命名为Edit.aspx。向页面中添加一个FormView控件和一个SqlDataSource控件。

配置SqlDataSource数据源时,除了使其能支持FormView控件显示记录的全部字段外,还需要为其生成Insert、Update和Delete命令(本题中仅使用Update命令),以提供对FormView控件更新记录的支持。

设置FormView控件的数据源为前面配置完成的SqlDataSource控件,设置其DefaultMode属性为Edit,使控件一旦加载就立即进入编辑模式。按图8-26所示,修改FormView控件的EditTemplate模板。

图8-26 编辑FormView控件的EditTemplate模板

(4) 编写Edit.aspx页面中相关代码

FormView控件中发生记录更新后执行的事件代码如下:

protected void FormView1_ItemUpdated(object sender, FormViewUpdatedEventArgs e) {

Response.Redirect(\}

用户在更新界面中单击“取消”按钮时执行的事件代码如下:

protected void UpdateCancelButton_Click(object sender, EventArgs e) {

Response.Redirect(\}

7

本文来源:https://www.bwwdw.com/article/85kw.html

Top