asp 企业级应用开发
DESCRIPTION
ASP.net 企业级应用开发. 信息工程系:罗明刚. 数据绑定控件 ( 一 ). 第七章. 回顾. Global.asax 文件包含常用的Application_Start、Application_End、Session_Start、Session_End等事件 Application 对象是存储于服务器的全局变量 Cookie 存储信息于客户端 Session 对象用于在服务器端存储用户的信息,在用户结束会话时被清除 新用户访问应用程序时会激活 Session_Start 事件,而用户退出应用程序时会触发 Session_End 事件. 目标. 理解数据绑定 - PowerPoint PPT PresentationTRANSCRIPT
ASP.net ASP.net 企业级应用开发企业级应用开发
信息工程系:罗明刚
数据绑定控件 ( 一 )
第七章
3
回顾 Global.asax 文件包含常用的
Application_Start、 Application_End、 Session_Start、Session_End等事件
Application 对象是存储于服务器的全局变量 Cookie 存储信息于客户端 Session 对象用于在服务器端存储用户的信息,在用户结束会话时被清除
新用户访问应用程序时会激活 Session_Start 事件,而 用户退出应用程序时会触发 Session_End 事件
4
目标理解数据绑定使用 DataList 控件使用数据视图排序和筛选在 ASP.NET 中使用 ADO.NET 的事务处理
5
数据绑定简介 2-1
控件
数据数据
检索到的数据
检索到的数据
数据数据
欢迎 “ ”数据绑定是将数据链接到显
示该数据的控件的过程 数据绑定是将数据链接到显
示该数据的控件的过程
6
数据绑定简介 2-2
用于绑定控件的表达式置于 <%#......%> 标记之间
7
简单属性绑定
<asp:Image id="imgVote1" runat="server" Height="12px" Width="<%#vote1%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote1" Text="<%#vote1%>" runat="server"></asp:Label><asp:Image id="imgVote2" runat="server" Height="12px" Width="<%#vote2%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote2" Text="<%#vote2%>" runat="server"></asp:Label><asp:Image id="imgVote3" runat="server" Height="12px" Width="<%#vote3%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote3" Text="<%#vote3%>" runat="server"></asp:Label>
代码视图// 定义成员变量protected static int vote1 = 0;protected static int vote2 = 0;protected static int vote3 = 0; private void btnVote1_Click(object sender, System.EventArgs e){
vote1 += 1;this.DataBind();
}private void btnVote2_Click(object sender, System.EventArgs e){
vote2 += 1;this.DataBind();
}private void btnVote3_Click(object sender, System.EventArgs e){
vote3 += 1;this.DataBind();
}
HTML 视图 运行结果
8
表达式绑定
<asp:Image id="imgVote1" runat="server" Height="12px" Width="<%#4*vote1%>"
ImageUrl="red.bmp"></asp:Image>
<asp:Label id="lblVote1" Text="<%#vote1%>" runat="server"></asp:Label>
<asp:Image id="imgVote2" runat="server" Height="12px" Width="<%#4*vote2%>"
ImageUrl="red.bmp"></asp:Image>
<asp:Label id="lblVote2" Text="<%#vote2%>" runat="server"></asp:Label>
<asp:Image id="imgVote3" runat="server" Height="12px" Width="<%#4*vote3%>"
ImageUrl="red.bmp"></asp:Image>
<asp:Label id="lblVote3" Text="<%#vote3%>" runat="server"></asp:Label>
代码视图
HTML 视图
运行结果
// 定义成员变量protected static int vote1 = 0;protected static int vote2 = 0;protected static int vote3 = 0; private void btnVote1_Click(object sender, System.EventArgs e){
vote1 += 1;this.DataBind();
}private void btnVote2_Click(object sender, System.EventArgs e){
vote2 += 1;this.DataBind();
}private void btnVote3_Click(object sender, System.EventArgs e){
vote3 += 1;this.DataBind();
}
9
方法的结果绑定protected string GetVotePercent(int vote){
int sumVote = vote1 + vote2 + vote3;if (sumVote == 0){
return "0%";}else{
decimal percent = 100 * (Convert.ToDecimal(vote) /Convert.ToDecimal(sumVote));
return percent.ToString("n2") + "%";}
}
建立一个新方法
<asp:Image id="imgVote1" runat="server" Height="12px" Width="<%#vote1%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote1" Text="<%#GetVotePercent(vote1)%>" runat="server"></asp:Label><asp:Image id="imgVote2" runat="server" Height="12px" Width="<%#vote2%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote2" Text="<%#GetVotePercent(vote2)%>" runat="server"></asp:Label><asp:Image id="imgVote3" runat="server" Height="12px" Width="<%#vote3%>" ImageUrl="red.bmp"></asp:Image><asp:Label id="lblVote3" Text="<%#GetVotePercent(vote3)%>" runat="server"></asp:Label>
调用方法的结果绑定
运行结果
10
使用 DataList 控件显示数据 3-1
使用 Datalist 控件可以指定数据流
WELCOME
WELCOME
水平方式垂直方式
Datalist 控件
项模板
交替项模板
页脚模板
页眉模板
编辑项模板
选择项模板
分隔符模板
也可以为 DataList 控件设置要显示的数据列数和行数
11
使用 DataList 控件显示数据 3-2
示例: DatalistDemo.aspx
private void Page_Load(object sender, System.EventArgs e){
Response.Write(“<center><b><u> 带有交替列的数据列表 </center>”+ “</b></u><br>");
if(!IsPostBack) {
DataTable mydt = new DataTable();DataRow mydr; mydt.Columns.Add(new DataColumn("Numbers“
, typeof(Int32)));mydt.Columns.Add(new DataColumn("Squares“
, typeof(Int32)));mydt.Columns.Add(new DataColumn("Cubes“
, typeof(Int32))); 续…
for (int i=0;i<30;i++){
mydr = mydt.NewRow();mydr[0] = i;mydr[1] = i * i;mydr[2] = i * i * i;mydt.Rows.Add (mydr);
}
dlMyList.DataSource = mydt;dlMyList.DataBind ();
}}
为 DataList 控件指定数据源
将数据绑定到 DataList
12
使用 DataList 控件显示数据 3-3
示例的 HTML 视图<asp:DataList id="dlMyList" RepeatDirection="Horizontal" RepeatColumns="10"
runat="server">
<ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "Numbers") %>
<br><%# DataBinder.Eval(Container.DataItem, "Squares") %><br><%# DataBinder.Eval(Container.DataItem, "Cubes") %><br>
</ItemTemplate>
<AlternatingItemTemplate><i><b><%# DataBinder.Eval(Container.DataItem, "Numbers") %></b><i><br>
<i><b><%# DataBinder.Eval(Container.DataItem
, "Squares") %><b><i><br><i><b><%# DataBinder.Eval(Container.DataItem, "Cubes") %><b><i><br>
</AlternatingItemTemplate></asp:DataList>
输出结果
13
DataBinder.Eval 方法
DataBinder.Eval 方法用于在运行时计算数据绑定表达式,并按照要求格式化输出结果
DataBinder.Eval 方法用于在运行时计算数据绑定表达式,并按照要求格式化输出结果
此方法有三个参数
对为其表达式求值的对象的引用
格式字符串
数据表中的数据列名称
用于显示指定格式的值
命名容器
数据字段名
14
使用 DataView 控件 3-1DataView 用于呈现 DataTable 中的数据的自定义视图
NAMES No DESIGAGE
1.
2.
3.
4.
ABC
DEF
LMN
XYG
27
60
57
33
PL
GM
MD
TL
职员数据
NAMES No DESIGAGE
2.
3.
DEF
LMN
60
57
GM
MD
Data View Age > 55
15
使用 DataView 控件 3-2employee 表的 DataView 控件仅检索年龄大于 55 的职员的记
录mydv = new DataView (ds.Tables ["employee"]);mydv.RowFilter = "age > 55";
Sort 属性用于以递增或递减顺序为行排序
mydv.Sort = "fname ASC";
递增排列
16
使用 DataView 控件 3-3DataView 控件可以限制 employee 表中显示的行DataView 控件可以限制 employee 表中显示的行private void Page_Load(object sender, System.EventArgs e){
Response.Write(“<center><b><u> 数据视图 </center></b></u> <br>");SqlConnection objSqlConnection = new
SqlConnection("server=vijayk;uid=sa;pwd=playware;database=pubs");SqlDataAdapter objSqlAdapter = new SqlDataAdapter(
"select * from employee where job_id = 5", objSqlConnection);DataSet objDataSet = new DataSet();objSqlAdapter.Fill(objDataSet, "employee"); DataView objDataView = new DataView (objDataSet.Tables
["employee"]);objDataView.RowFilter = "job_lvl >180";objDataView.Sort = "fname ASC";dgMyGrid.DataSource=objDataView;dgMyGrid.DataBind();
}
输出结果
17
事务处理 5-1
ASP.NET 中可用的事务处理指令
指令 描述Disabled 这是默认值,表示禁止在事务处理中执行页面
NotSupported表示不管事务处理是活动还是闲置,页面都不会在事务处理中执行
Supported这表示页面将在已存在的事务处理上下文中执行。但是,如果不存在事务处理,则将不会新建一个事务处理
Required设定此指令后,页面将在已存在的事务处理上下文中执行。如果不存在事务处理,则会新建一个事务处理
RequriesNew当页面请求一项事务处理时,此指令为每个请求新建一个事务处理
数据库级数据库级
ADO.NET 级ADO.NET 级可以在以下级别创建事务处理可以在以下级别创建事务处理
ASP.NET 页面级ASP.NET 页面级
要启用 ASP.NET 页面中的事务处理,请将事务处理指令添加到 ASPX 页面
18
private void btnTransfer_Click(object sender, System.EventArgs e){
lblAccount1.Text=" ";lblAccount2.Text=" ";int CurrBalance; string strSQL = "Select Balance FROM Account where
AccNo='"+txtFrom.Text+"'" ; SqlConnection objSqlConnection = new SqlConnection(
"server=SQLDB;uid=sa;pwd=password;” + ”database=Account");
objSqlConnection.Open();SqlDataReader objReader;SqlCommand objSqlCommand = new SqlCommand(strSQL
, objSqlConnection);try{ 续 ..
导入 System.EnterpriseServices 命名空间,使 ContextUtil 类可用于实现事务处理的提交和放弃方法
ASPTransactionsDemo.aspx’
Transaction = “RequiresNew” 指令已添加到页面,确保 Asp 页面上的操
作将于新的事务处理开始
事务处理 5-2
19
objReader = objSqlCommand.ExecuteReader();
objReader.Read();
CurrBalance = Convert.ToInt32(objReader.GetValue(0));
objReader.Close();
if (CurrBalance < Convert.ToInt32(txtAmount.Text))
{
throw(new Exception(“ 转帐金额不足 "));
}
strSQL = "Update Account set Balance = Balance - "
+ txtAmount.Text + " where AccNo = '"
+ Convert.ToInt32(txtFrom.Text) + "'";
objSqlCommand.CommandText=strSQL;
objSqlCommand.ExecuteNonQuery();
事务处理 5-3
20
lblAccount1.Text=“ 帐户 " + txtFrom.Text +"
成功记入借方 ";
strSQL = "Update Account set Balance = Balance +
"+ txtAmount.Text + " where AccNo = '" +
Convert.ToInt32(txtTo.Text) + "'";
objSqlCommand.CommandText = strSQL;objSqlCommand.ExecuteNonQuery();
lblAccount2.Text=“ 帐户 ” + txtTo.Text +“ 成功记入贷方 ";
ContextUtil.SetComplete();
lblException.Text = “ 成功将金额 " +
txtAmount.Text + “ 从帐户 ” + txtFrom.Text
+ “ 转帐到帐户 ” + txtTo.Text + “。 ";;
}
catch(Exception ex)
续 ..
在所有事务处理均成功的事件中提交事务处理
事务处理 5-4
21
{
ContextUtil.SetAbort();
lblException.Text = “ 错误: " + ex.Message;
}
finally
{
objSqlConnection.Close();
}
}
输出结果
在任何单项事务处理失败的事件中放弃所有事务处理
事务处理 5-5
22
在 ADO.NET 级实现事务处理 4-1
private void btnTransfer_Click(object sender, System.EventArgs e)
{
lblAccount1.Text=" ";
lblAccount2.Text=" ";
int CurrBalance;
string strSQL = "Select Balance FROM Account where AccNo='“
+ txtFrom.Text+"'" ;
SqlConnection objSqlConnection = new SqlConnection("server=VIJAYK;uid=sa;pwd=playware;database=Account");
objSqlConnection.Open();
SqlDataReader objReader;
SqlCommand objSqlCommand = new SqlCommand(strSQL
, objSqlConnection);
Cont..
‘ADOTransactionDemo.aspx’
导入命名空间 System.Data.SqlClient ,并且在在 btnTransfer 按钮的 Click 事件中添加代码
23
SqlTransaction objSqlTransaction =objSqlConnection.
BeginTransaction();
objSqlCommand.Transaction=objSqlTransaction;
try
{
objReader = objSqlCommand.ExecuteReader();
objReader.Read();
CurrBalance = Convert.ToInt32(objReader.GetValue(0));
objReader.Close();
if (CurrBalance < Convert.ToInt32(txtAmount.Text))
{
throw(new Exception(“ 转帐金额不足 "));
}
续 ..
在 ADO.NET 级实现事务处理 4-2
24
strSQL = "Update Account set Balance = Balance - " + txtAmount.Text
+ " where AccNo = '" + Convert.ToInt32(txtFrom.Text) + "'";
objSqlCommand.CommandText=strSQL;
objSqlCommand.ExecuteNonQuery();
lblAccount1.Text=“ 帐户 ” + txtFrom.Text +“ 成功记入借方 ";
strSQL = "Update Account set Balance = Balance + "+ txtAmount.Text
+ " where AccNo = '" + Convert.ToInt32(txtTo.Text) + "'";
objSqlCommand.CommandText = strSQL;
objSqlCommand.ExecuteNonQuery();
在 ADO.NET 级实现事务处理 4-3
25
lblAccount2.Text=“ 帐户” + txtTo.Text +“ 成功记入贷方 ";objSqlTransaction.Commit();lblException.Text = “ 成功将金额 " +
txtAmount.Text + “ 从帐户 ” + txtFrom.Text + “ 转入帐户 ” + txtTo.Text + “。 ";;
}catch(Exception ex){
objSqlTransaction.Rollback();lblException.Text = "Error: " + ex.Message;
}finally{
objSqlConnection.Close();}
}
完成事务处理时提交变更
事务处理不成功时恢复变更
输出结果
在 ADO.NET 级实现事务处理 4-4
26
总结 2-1
数据绑定是将从数据库中检索到的数据链接到将显示这些数据的控件的过程
可对多种类型的数据执行数据绑定,例如:表达式数据库数据Databinder.Eval 方法
DataGrid 、 DataList 和 Repeater 等控件可用于连接数据库并实现对数据库数据的进行数据绑定
Databinder.Eval 方法用于计算运行时的数据绑定表达式,并按照浏览器显示的要求来格式化输出结果
27
总结 2-2
DataList 控件可用于显示数据,而且支持指定数据流
模板用于将数据显示在浏览器和 DataList 控件中DataView 可用于自定义 DataTable 中数据的显
示。 DataView 中的数据可进行筛选、搜索和排列
ADO.NET 级的事务处理可以通过 SqlTransaction 类的方法来应用。可通过使用事务处理指令来指示页面上的事务处理支持级