利用三层架构实现数据的分页显示与页码点击跳转
一、业务需求:
利用三层架构实现对数据库数据的分页功能和点击每个页码实现不同分页面之间的跳转,效果如下图所示:
二、三层结构代码详细示例
1、表现层代码
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Demo3.aspx.cs" Inherits="Chapter05.Demo3" %> 2 3 <!DOCTYPE html> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 8 <title></title> 9 <%--引入css样式表--%> 10 <link href="PageBar.css" rel="stylesheet" /> 11 </head> 12 <body> 13 <form id="form1" runat="server"> 14 <div> 15 <table> 16 17 <asp:Repeater ID="Repeater1" runat="server"> 18 <HeaderTemplate> 19 <tr> 20 <th>登录名</th> 21 <th>密码</th> 22 <th>是否激活</th> 23 </tr> 24 </HeaderTemplate> 25 <ItemTemplate> 26 <tr> 27 <td><%#Eval("LoginName") %></td> 28 <td><%#Eval("Pwd") %></td> 29 <td><%#Eval("IsEnabled") %></td> 30 </tr> 31 </ItemTemplate> 32 </asp:Repeater> 33 </table> 34 <%-- <a href="Demo3.aspx?pageIndex=1">1</a> 35 <a href="Demo3.aspx?pageIndex=2">2</a> 36 <a>3</a> 37 <a>4</a> 38 <a>5</a>--%> 39 <%--调用后台PageBar类中的代码--%> 40 <%=PageBar %> 41 </div> 42 </form> 43 </body> 44 </html>
2、表现层后台代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 using Chapter05.BLL; 9 using Chapter05.Models; 10 using System.Text; 11 12 namespace Chapter05 13 { 14 public partial class Demo3 : System.Web.UI.Page 15 { 16 //定义公共属性PageBar 17 public string PageBar { get; set; } 18 protected void Page_Load(object sender, EventArgs e) 19 { 20 if (!IsPostBack) 21 { 22 //当前页 23 int pageIndex = 1; 24 //每页行数 25 int pageSize = 5; 26 //总页数 27 int pageCount = 0; 28 //总行数 29 int rowCount = 0; 30 //判断当前页是否为空 31 if (Request.QueryString["pageIndex"] != null) 32 { 33 34 pageIndex = Convert.ToInt32(Request.QueryString["pageIndex"].ToString()); 35 } 36 37 LoginInfoBLL bll = new LoginInfoBLL(); 38 List<LoginInfo> list = bll.GetPageData(pageIndex, pageSize, ref rowCount, ref pageCount); 39 //绑定数据源 40 this.Repeater1.DataSource = list; 41 this.Repeater1.DataBind(); 42 //调用分页方法PageBar 43 this.PageBar = Chapter05.PageBar.CreatePageBar(pageIndex, pageCount); 44 } 45 46 } 47 48 49 50 } 51 }
3、逻辑判断层代码
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using Chapter05.DAL; 8 using Chapter05.Models; 9 10 namespace Chapter05.BLL 11 { 12 public class LoginInfoBLL 13 { 14 public DataSet GetAll() 15 { 16 LoginInfoDAL dal = new LoginInfoDAL(); 17 return dal.GetAll(); 18 } 19 20 public List<LoginInfo> GetAllList() 21 { 22 LoginInfoDAL dal = new LoginInfoDAL(); 23 return dal.GetAllList(); 24 } 25 26 public bool DoDelete(string id) 27 { 28 LoginInfoDAL dal = new LoginInfoDAL(); 29 return dal.Delete(id) > 0; 30 } 31 32 public LoginInfo GetEntityById(string id) 33 { 34 return new LoginInfoDAL().GetEntityById(id); 35 } 36 37 public bool ModifyLoginInfo(LoginInfo info) 38 { 39 return new LoginInfoDAL().Update(info) > 0; 40 } 41 //存储过程分页 42 public List<LoginInfo> GetPageData(int pageIndex, int pageSize, ref int rowCount, ref int pageCount) { 43 44 return new LoginInfoDAL().GetPageData(pageIndex, pageSize, ref rowCount, ref pageCount); 45 } 46 } 47 48 49 }
4、数据访问层代码
——LoginInfoDAL
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using Chapter05.Models; 8 using System.Data.SqlClient; 9 10 namespace Chapter05.DAL 11 { 12 public class LoginInfoDAL 13 { 14 15 #region 获取全部数据 16 17 /// <summary> 18 /// 19 /// </summary> 20 /// <returns></returns> 21 public DataSet GetAll() 22 { 23 //1.定义SQL 24 string sql = "select * from LoginInfo"; 25 return SqlHelper.GetDataSet(sql, CommandType.Text); 26 } 27 28 public List<LoginInfo> GetAllList() 29 { 30 List<LoginInfo> result = new List<LoginInfo>(); 31 DataSet ds = new DataSet(); 32 ds = GetAll(); 33 if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) 34 { 35 foreach (DataRow dr in ds.Tables[0].Rows) 36 { 37 LoginInfo temp = DataRowToEntity(dr); 38 // 转换的结果 ,添加到 集合中 39 result.Add(temp); 40 } 41 } 42 else 43 { 44 result = null; 45 } 46 return result; 47 } 48 49 50 #endregion 51 52 #region 查询单个实体 53 54 public LoginInfo GetEntityById(string id) 55 { 56 LoginInfo result = null; 57 string sql = "select * from LoginInfo where id=@id"; 58 SqlParameter param = new SqlParameter("@id", SqlDbType.VarChar, 50); 59 param.Value = id; 60 61 DataSet ds = SqlHelper.GetDataSet(sql, CommandType.Text, param); 62 if (ds.Tables[0].Rows.Count > 0) 63 { 64 result = DataRowToEntity(ds.Tables[0].Rows[0]); 65 } 66 return result; 67 } 68 69 #endregion 70 71 #region 分页数据 72 //定义集合类型的方法,并传入参数,声明输出参数 73 public List<LoginInfo> GetPageData(int pageIndex, int pageSize, ref int rowCount, ref int pageCount) 74 { 75 //定义数据对象集合 76 List<LoginInfo> result = new List<LoginInfo>(); 77 //调用存储过程 78 string sql = "PROC_PageData_LoginInfo"; 79 80 SqlParameter[] parameters = new SqlParameter[] { 81 new SqlParameter("@pageIndex",SqlDbType.Int), 82 new SqlParameter("@pageSize",SqlDbType.Int), 83 new SqlParameter("@rowCount",SqlDbType.Int), 84 new SqlParameter("@pageCount",SqlDbType.Int) 85 }; 86 87 parameters[0].Value = pageIndex; 88 parameters[1].Value = pageSize; 89 //声明参数类型:输出参数 90 parameters[2].Direction = ParameterDirection.Output; 91 parameters[3].Direction = ParameterDirection.Output; 92 //调用sqlhelper方法,得到数据集合,命令类型为存储过程 93 DataSet ds = SqlHelper.GetDataSet(sql, CommandType.StoredProcedure, parameters); 94 //给输出参数赋值 95 rowCount = Convert.ToInt32(parameters[2].Value); 96 pageCount = Convert.ToInt32(parameters[3].Value); 97 //判断数据集是否为空和数据集合第一张表中是否有数据 98 if (ds != null && ds.Tables[0].Rows.Count > 0) 99 { 100 //遍历第一张表中的每一行数据 101 foreach (DataRow dr in ds.Tables[0].Rows) 102 { 103 //实例化公共模型LoginInfo 104 LoginInfo temp = new LoginInfo(); 105 //调用方法将每一行数据转换为对象,并赋值给temp对象 106 temp = DataRowToEntity(dr); 107 //将temp对象赋给对象集合result 108 result.Add(temp); 109 } 110 } 111 else 112 { 113 result = null; 114 } 115 //返回对象集合 116 return result; 117 } 118 119 #endregion 120 121 #region 把数据行转化成 对象 122 123 private LoginInfo DataRowToEntity(DataRow dr) 124 { 125 LoginInfo temp = new LoginInfo(); 126 temp.ID = dr["ID"].ToString(); 127 temp.LoginName = dr["LoginName"].ToString(); 128 temp.Pwd = dr["Pwd"].ToString(); 129 temp.IsEnabled = dr["IsEnabled"].ToString(); 130 temp.IsDelete = Convert.ToInt32(dr["IsDelete"]); 131 return temp; 132 } 133 134 #endregion 135 136 #region 根据主键删除数据 137 public int Delete(string id) 138 { 139 string sql = "delete from LoginInfo where id=@id"; 140 141 SqlParameter param = new SqlParameter("@id", SqlDbType.VarChar, 50); 142 param.Value = id; 143 return SqlHelper.ExecuteNonquery(sql, CommandType.Text, param); 144 145 } 146 147 148 #endregion 149 150 #region 修改数据 151 152 public int Update(LoginInfo loginInfo) 153 { 154 string sql = "update LoginInfo set LoginName=@loginName,Pwd=@pwd,IsDelete=@isDelete where Id=@id"; 155 156 SqlParameter[] paramters = new SqlParameter[] { 157 new SqlParameter("@loginName",SqlDbType.VarChar,50), 158 new SqlParameter("@pwd",SqlDbType.VarChar,16), 159 new SqlParameter("@isDelete",SqlDbType.Int), 160 new SqlParameter("@id",SqlDbType.VarChar,50) 161 }; 162 163 paramters[0].Value = loginInfo.LoginName; 164 paramters[1].Value = loginInfo.Pwd; 165 paramters[2].Value = loginInfo.IsDelete; 166 paramters[3].Value = loginInfo.ID; 167 168 return SqlHelper.ExecuteNonquery(sql, CommandType.Text, paramters); 169 } 170 171 #endregion 172 } 173 }
——SQLHelper
1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using System.Data; 5 using System.Data.SqlClient; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 10 namespace Chapter05.DAL 11 { 12 public class SqlHelper 13 { 14 /// <summary> 15 /// 获取链接字符串 16 /// </summary> 17 private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; 18 19 /// <summary> 20 /// 执行查询操作 21 /// </summary> 22 /// <param name="sql">SQL 语句</param> 23 /// <param name="type">CommandType 命令的类型【text=>sql 脚本,StoredProcedure=>存储过程】</param> 24 /// <param name="pars">参数</param> 25 /// <returns>返回结果集 dataset</returns> 26 public static DataSet GetDataSet(string sql, CommandType type, params SqlParameter[] pars) 27 { 28 //1.创建链接 29 SqlConnection conn = new SqlConnection(connStr); 30 //2.打开链接 31 conn.Open(); 32 //3.创建命令对象 33 SqlCommand cmd = new SqlCommand(sql, conn); 34 //4.创建 适配器 35 SqlDataAdapter da = new SqlDataAdapter(cmd); 36 // 当传入的参数不为空时,直接添加到Cmd 对象的Parameters 属性上 37 if (pars != null) 38 { 39 foreach (var item in pars) 40 { 41 item.Value = item.Value == null ? DBNull.Value : item.Value; 42 cmd.Parameters.Add(item); 43 } 44 //cmd.Parameters.AddRange(pars); 45 } 46 //根据 使用者 传入的命令类型,给 Cmd 对象的CommandType 属性赋值; 47 cmd.CommandType = type; 48 DataSet ds = new DataSet(); 49 da.Fill(ds); 50 //关闭链接 51 conn.Close(); 52 return ds; 53 } 54 55 56 /// <summary> 57 /// 执行SQL语句:返回 影响行数 58 /// </summary> 59 /// <param name="sql">SQL 语句</param> 60 /// <param name="type">CommandType 命令的类型【text=>sql 脚本,StoredProcedure=>存储过程】</param> 61 /// <param name="pars">参数</param> 62 /// <returns></returns> 63 public static int ExecuteNonquery(string sql, CommandType type, params SqlParameter[] pars) 64 { 65 using (SqlConnection conn = new SqlConnection(connStr)) 66 { 67 using (SqlCommand cmd = new SqlCommand(sql, conn)) 68 { 69 if (pars != null) 70 { 71 foreach (var item in pars) 72 { 73 item.Value = item.Value == null ? DBNull.Value : item.Value; 74 cmd.Parameters.Add(item); 75 } 76 //cmd.Parameters.AddRange(pars); 77 78 } 79 cmd.CommandType = type; 80 conn.Open(); 81 return cmd.ExecuteNonQuery(); 82 } 83 } 84 } 85 86 /// <summary> 87 /// 执行查询,并返回查询所返回的结果集中第一行的第一列 88 /// </summary> 89 /// <param name="sql"></param> 90 /// <param name="type"></param> 91 /// <param name="pars"></param> 92 /// <returns></returns> 93 public static object ExecuteScalar(string sql, CommandType type, params SqlParameter[] pars) 94 { 95 using (SqlConnection conn = new SqlConnection(connStr)) 96 { 97 using (SqlCommand cmd = new SqlCommand(sql, conn)) 98 { 99 if (pars != null) 100 { 101 //cmd.Parameters.AddRange(pars); 102 foreach (var item in pars) 103 { 104 item.Value = item.Value == null ? DBNull.Value : item.Value; 105 cmd.Parameters.Add(item); 106 } 107 } 108 cmd.CommandType = type; 109 conn.Open(); 110 return cmd.ExecuteScalar(); 111 } 112 } 113 } 114 } 115 }
5、封装的实体类--PageBar代码(实现点击数字切换分页页面)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Web; 6 7 namespace Chapter05 8 { 9 public class PageBar 10 { 11 /// <summary> 12 /// 分页方法 13 /// </summary> 14 /// <param name="pageIndex"></param> 15 /// <param name="pageCount"></param> 16 /// <returns></returns> 17 public static string CreatePageBar(int pageIndex, int pageCount) 18 { 19 //计算起始页码 20 int startPage = pageIndex - 5 < 1 ? 1 : pageIndex - 5; 21 // 计算结束页码 22 int endPage = startPage + 9 > pageCount ? pageCount : startPage + 9; 23 24 StringBuilder sb = new StringBuilder(); 25 // 设置Pagebar 的容器 26 sb.Append("<div class='pager'>"); 27 // 判断当前页码是否是第一页 28 if (pageIndex != 1) 29 { 30 //首页 31 sb.AppendFormat("<a href='Demo3.aspx?pageIndex={0}'>{1}</a>", 1, "首页"); 32 //上一页 33 sb.AppendFormat("<a href='Demo3.aspx?pageIndex={0}'>{1}</a>", pageIndex - 1, "上一页"); 34 } 35 // 循环生成 页码标签 36 for (int i = startPage; i <= endPage; i++) 37 { 38 //判断 如果页码等于当前页, 设置Current 样式 39 if (i == pageIndex) 40 { 41 sb.AppendFormat("<a class='current' >{0}</a>", i); 42 } 43 else 44 { 45 sb.AppendFormat("<a href='Demo3.aspx?pageIndex={0}'>{0}</a>", i); 46 } 47 } 48 //判断 当前页,是否是 尾页 49 if (pageIndex != endPage) 50 { 51 // 下一页 52 sb.AppendFormat("<a href='Demo3.aspx?pageIndex={0}'>{1}</a>", pageIndex + 1, "下一页"); 53 //尾页 54 sb.AppendFormat("<a href='Demo3.aspx?pageIndex={0}'>{1}</a>", pageCount, "尾页"); 55 } 56 sb.Append("</div>"); 57 return sb.ToString(); 58 } 59 } 60 }
6、公共类--Model层代码
——封装公共属性
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Chapter05.Models 8 { 9 public class LoginInfo 10 { 11 public string ID { get; set; } 12 public string LoginName { get; set; } 13 public string Pwd { get; set; } 14 public string IsEnabled { get; set; } 15 public int IsDelete { get; set; } 16 } 17 }
7、页码条--PageBar的样式表中CSS样式代码
1 /*PageBarCSS*/ 2 3 .pager { 4 font-size: 12px; 5 margin: 25px 0; 6 text-align: center; 7 color: #2e6ab1; 8 line-height: 200%; 9 overflow: hidden; 10 } 11 12 .pager a { 13 border: 1px solid #9aafe5; 14 color: #2e6ab1; 15 margin: 0 2px; 16 padding: 2px 5px; 17 text-decoration: none; 18 } 19 20 .pager span.current { 21 background-color: #2e6ab1; 22 border: 1px solid navy; 23 color: #fff; 24 font-weight: bold; 25 margin: 0 2px; 26 padding: 2px 5px; 27 } 28 29 .pager a.current { 30 background-color: #2e6ab1; 31 border: 1px solid navy; 32 color: #fff; 33 font-weight: bold; 34 margin: 0 2px; 35 padding: 2px 5px; 36 }
8、SQL数据库中的分页存储过程
1 use empdb 2 go 3 create proc proc_pagedate_empinfor 4 @pageIndex int, 5 --声明为float类型的目的:使select @pageCount=CEILING(@rowCount/@pageSize)可以向上取整 6 @pageSize float, 7 @rowCount int out, 8 @pageCount int out 9 as 10 begin 11 select * from (select ROW_NUMBER() over (order by empId) as Num,* from empinfo) as temp 12 where Num>(@pageIndex-1)*@pageSize and Num<=@pageIndex*@pageSize 13 select @rowCount=COUNT(1) from empinfo 14 select @pageCount=CEILING(@rowCount/@pageSize) 15 end 16 go 17 declare @pageCount int, 18 @rowCount int 19 --1:@pageIndex;3:@pageSize 20 exec proc_pagedate_empinfor 1,3,@rowCount out,@pageCount out 21 select @rowCount as 总条数,@pageCount as 总页数
//=================================以下为Reprater控件应用代码示例======================================
三、利用Reprater这个显示数据的控件绑定数据源
1、主窗体表现层代码
——表现层代码
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Demo2.aspx.cs" Inherits="Chapter05.Demo2" %> 2 3 <!DOCTYPE html> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 8 <title></title> 9 10 </head> 11 <body> 12 <form id="form1" runat="server"> 13 <div> 14 <table> 15 <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand"> 16 17 <%-- 头部 【表头】 只执行一次 --%> 18 <HeaderTemplate> 19 <tr> 20 <th>登录名</th> 21 <th>登录密码</th> 22 <th>是否激活</th> 23 <th>是否删除</th> 24 </tr> 25 </HeaderTemplate> 26 <%-- 数据项模板 --%> 27 <ItemTemplate> 28 <tr> 29 <td><%#Eval("LoginName") %></td> 30 <td><%#Eval("Pwd") %></td> 31 <td><%#Eval("IsEnabled") %></td> 32 <td><%#Eval("IsDelete") %></td> 33 <td> 34 <asp:Button ID="btnUpate" runat="server" Text="修改" CommandName="btnUpate" 35 CommandArgument='<%#Eval("ID") %>' /></td> 36 <td> 37 <asp:Button ID="btnDelete" runat="server" Text="删除" CommandName="btnDelete" 38 CommandArgument='<%#Eval("ID") %>' /></td> 39 </tr> 40 </ItemTemplate> 41 <SeparatorTemplate> 42 <tr> 43 <td colspan="4"> 44 <hr /> 45 </td> 46 </tr> 47 </SeparatorTemplate> 48 <%-- 交替项 模板 --%> 49 <AlternatingItemTemplate> 50 <tr style="background-color: red"> 51 <td><%#Eval("LoginName") %></td> 52 <td><%#Eval("Pwd") %></td> 53 <td><%#Eval("IsEnabled") %></td> 54 <td><%#Eval("IsDelete") %></td> 55 <td> 56 <asp:Button ID="btnUpate" runat="server" Text="修改" CommandName="btnUpate" CommandArgument='<%#Eval("ID") %>' /> 57 58 </td> 59 <td> 60 <asp:Button ID="btnDelete" runat="server" Text="删除" CommandName="btnDelete" 61 CommandArgument='<%#Eval("ID") %>' 62 /> 63 64 </td> 65 </tr> 66 </AlternatingItemTemplate> 67 68 <%-- 尾部模板 只执行一次 --%> 69 <FooterTemplate> 70 <tr> 71 <td colspan="4">这是表尾</td> 72 </tr> 73 </FooterTemplate> 74 75 </asp:Repeater> 76 </table> 77 </div> 78 </form> 79 </body> 80 </html>
——表现层后台代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using Chapter05.BLL; 8 using System.Data; 9 using Chapter05.Models; 10 11 namespace Chapter05 12 { 13 public partial class Demo2 : System.Web.UI.Page 14 { 15 protected void Page_Load(object sender, EventArgs e) 16 { 17 if (!IsPostBack) 18 { 19 //this.Repeater1.DataSource = "指定数据源【数据表或者是数据集合】"; 20 //this.Repeater1.DataBind();//才是 绑定数据 到控件 21 DataSet ds = new DataSet(); 22 ds = new LoginInfoBLL().GetAll();//获取 数据 23 24 //this.Repeater1.DataSource = ds.Tables[0]; 25 //this.Repeater1.DataBind();//执行数据的绑定 26 List<LoginInfo> list = new LoginInfoBLL().GetAllList(); 27 if (list != null) 28 { 29 this.Repeater1.DataSource = list; 30 this.Repeater1.DataBind(); 31 } 32 } 33 34 } 35 36 protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 37 { 38 string cmd = e.CommandName; 39 string id = e.CommandArgument.ToString(); 40 if (cmd == "btnUpate") 41 { 42 //修改操作 43 Response.Redirect("ModifyLoginInfo.aspx?id=" + id); 44 } 45 else 46 { 47 // 删除操作 48 LoginInfoBLL bll = new LoginInfoBLL(); 49 bool boo = bll.DoDelete(id); 50 if (boo) 51 { 52 this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "alert('删除成功')", true); 53 //重新绑定 数据 54 55 } 56 else 57 { 58 this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "alert('删除失败')", true); 59 } 60 61 62 } 63 } 64 65 66 67 } 68 }
2、修改数据的窗体---表现层代码
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ModifyLoginInfo.aspx.cs" Inherits="Chapter05.ModifyLoginInfo" %> 2 3 <!DOCTYPE html> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 8 <title></title> 9 <script type="text/javascript"> 10 11 </script> 12 </head> 13 <body> 14 <form id="form1" runat="server"> 15 <%--<input type="hidden" />--%> 16 <asp:HiddenField ID="hidId" runat="server" /> 17 <div> 18 <table> 19 <tr> 20 <td> 21 <asp:Label ID="Label1" runat="server" Text="登录名"></asp:Label></td> 22 <td> 23 <asp:TextBox ID="txtLoginName" runat="server"></asp:TextBox></td> 24 </tr> 25 <tr> 26 <td> 27 <asp:Label ID="Label2" runat="server" Text="密码"></asp:Label></td> 28 <td> 29 <asp:TextBox ID="txtPwd" runat="server"></asp:TextBox></td> 30 </tr> 31 <tr> 32 <td> 33 <asp:Label ID="Label3" runat="server" Text="是否删除"></asp:Label></td> 34 <td> 35 <asp:TextBox ID="txtIsDelete" runat="server"></asp:TextBox></td> 36 </tr> 37 <tr> 38 <td colspan="2"> 39 <asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click" /> 40 41 </td> 42 </tr> 43 </table> 44 </div> 45 </form> 46 </body> 47 </html>
3、修改数据的窗体---表现层后台代码
1 using Chapter05.Models; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 using Chapter05.BLL; 9 10 11 namespace Chapter05 12 { 13 public partial class ModifyLoginInfo : System.Web.UI.Page 14 { 15 protected void Page_Load(object sender, EventArgs e) 16 { 17 if (!IsPostBack) 18 { 19 string id = Request.QueryString["id"].ToString(); 20 LoginInfo info = new LoginInfoBLL().GetEntityById(id); 21 if (info == null) 22 { 23 return; 24 } 25 26 this.txtLoginName.Text = info.LoginName; 27 this.txtPwd.Text = info.Pwd; 28 this.txtIsDelete.Text = info.IsDelete == 0 ? "正常" : "删除"; 29 this.hidId.Value = info.ID; 30 31 } 32 } 33 34 protected void btnSave_Click(object sender, EventArgs e) 35 { 36 LoginInfo temp = new LoginInfo(); 37 temp.ID = this.hidId.Value; 38 temp.LoginName = this.txtLoginName.Text.Trim(); 39 temp.Pwd = this.txtPwd.Text.Trim(); 40 temp.IsDelete = this.txtIsDelete.Text.Trim() == "正常" ? 0 : 1; 41 42 bool boo = new LoginInfoBLL().ModifyLoginInfo(temp); 43 if (boo) 44 { 45 //this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "alert('修改成功')",true); 46 47 // Response.Flush(); 48 49 Response.Write(@"<script>alert('修改成功'); 50 window.open('Demo2.aspx'); 51 </script>"); 52 } 53 else { 54 this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "alert('修改失败')", true); 55 } 56 } 57 } 58 }
存在的就是合理的,总有问题要解决!