1.NET三层架构与三层架构下GRIDVIEW控件增删改操作详解
三层架构下的GridView的增删改
三层架构下的GridView的增删改
1 新建一个数据库test,新建一个表Users,表中有如下字段(ID,username,password)。
其中ID为表示字段。
结构如下图:
2 新建三个类库DiaryBLL(业务逻辑层),DiaryDAL(数据访问层),DiaryModel(业务实体层),将上述三个类库放至解决方案DiaryPro中,然后在新建一个网站DiaryWeb。
然后右键单击网站,设为启动项目,结构图如下:
3 添加类库的引用关系
DiaryBLL添加DiaryDAL和DiaryModel,如下图所示:
DiaryDAL添加DiaryModel,如下图所示:
表示层Web添加上述三个,如下图所示:
4 类库中类的编写
1)DiaryModel(业务实体层),新建一个User类代码如下:using System;
using System.Collections.Generic;
using System.Text;
namespace DiaryModel
{
[Serializable] //序列化
public class Users
{
int _UserID;
string _UserName;
string _Password;
public int UserID
{
get { return _UserID; }
set { _UserID = value; }
}
///
///用户名///。
gridview 编辑,删除,更新的用法
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table cellpadding="0" cellspacing="0" border="0" width="80%" style="font-size: 11px">
</tr>
</table>
</div>
</form>
</body>
</html>
GridViewUp.aspx.cs文件代码:
using System;
using System.Data;
using System.Configuration;
<ItemTemplate>
<%# Eval("price") %>
</ItemTemplate>
gridview 编辑,删除,更新的用法.txtゅ你不用一上线看见莪在线,就急着隐身,放心。莪不会去缠你。说好的不离不弃 现在反而自己却做不到╮ gridview 编辑,删除,更新的用法.txt如果我能够看到自己的影子,我想它一定很忧伤,因为我把快乐都留在了前面。容易伤害别人和自己的人,总是对距离的边缘模糊不清的人。/blog/article.asp?id=585
数据控件DataGridView添加、删除和修改数据库中的内容
数据控件DataGridView添加、删除和修改数据库中的内容作者:天涯来源:中国自学编程网发布日期:1214063638介绍一个数据控件DataGridView,它是 3.5中新增加的的重要控件。
它是一种网格形式的控件,能以表格的形式显示数据,它的优势是能多行显示数据,在数据库的操作中会经常用到。
(1)打开VS2008,在D:\C#\ch14目录下建立名为DataGridViewTest的Windows应用程序,打开工程,为当前窗体添加控件,如表14-2所示。
表14-2 添加控件列表控件名NameTextDataGridViewdataGridView1ButtonbtnRef更新设置ButtonbtnDelete删除(2)接下来需要设置DadaAdapter和DataSet,方法同上一节一样。
选中DataGridView的DataSource属性。
(3)单击“下一步”按钮,选择“数据连接”图标。
(4)最后一步需要选择数据库对象,本例是要操作StudentInf数据库中的表,所以选择“表”复选框。
(5)设置完毕后,整个程序界面就设置完了。
程序界面设计完毕后,接下来要做的工作就是通过修改dataGridView1中的数据来更新数据库中的内容。
它实现的原理很简单,通过studentInfDataSet把dataGridView1绑定到Class1表,studentInfDataSet处于中间位置,所以在dataGridView1中修改的数据必须要传递到studentInfDataSet后才能改变数据库中的内容。
(1)双击“更新设置”按钮,添加如下代码。
this.sqlDataAdapter1.Update(this.studentInfDataSet);该代码的功能是调用sqlDataAdapter1的Update()方法实现对studentInfDataSet的更新。
(2)按F5键,程序运行以后,对dataGridView1添加一行新的数据,然后单击“更新设置”按钮,完成后关闭程序再打开。
GridView增删改 三层 完整版
:1)DiaryModel(业务实体层),新建一个User类代码如下:using System;using System.Collections.Generic;using System.Text;namespace DiaryModel{[Serializable] //序列化public class Users{int _UserID;string _UserName;string _Password;public int UserID{get { return _UserID; }set { _UserID = value; }}///<summary>///用户名///</summary>public string UserName{get { return _UserName; }set { _UserName = value; }}///<summary>///密码///</summary>public string Password{get { return _Password; }set { _Password = value; }}}该类可以获得User类的各个字段。
<appSettings><add key="DbHelperProvider" value="System.Data.SqlClient"/></appSettings><connectionStrings><add name="DbHelperConnectionString" connectionString="Data Source=FAN;InitialCatalog=test;User ID=sa;Password=20;Connect Timeout=18000"/></connectionStrings>(将DBHelper.cs类纺织DiaryDAL目录下,要注意的是DBHelper类下的命名空间要改为DiaryDAL)新建一个UserService.cs类,实现增删改查等相关操作,具体代码如下所示:using System;using System.Collections.Generic;using System.Text;using System.Data;using DiaryModel; //记得要添加引用namespace DiaryDAL{public class UserService{//添加public static bool Add(Users user){string sql = "insert into Users(username,password) values(@username,@password)";Dictionary<string,object> dic=new Dictionary<string,object>();dic.Add("@username", erName);dic.Add("@password", user.Password);return DBHelper.ExecuteNonQuery(sql, dic) > 0 ? true : false ;}//删除public static bool Delete(int UserID){string sql = "delete from Users where ID=@UserID";Dictionary<string, object> dic = new Dictionary<string, object>();dic.Add("@UserID", UserID);return DBHelper.ExecuteNonQuery(sql, dic) > 0 ? true : false;}//修改public static bool Modify(Users user){string sql = "update Users set username=@username,password=@password where ID=@UserID";Dictionary<string, object> dic = new Dictionary<string, object>();dic.Add("@username", erName);dic.Add("@password", user.Password);dic.Add("@UserID", erID);return DBHelper.ExecuteNonQuery(sql, dic) > 0 ? true : false;}//显示public static List<Users> GetAllUsers(){string sql = "select * from Users";DataTable dt = DBHelper.GetDataSet(sql);List<Users> list = new List<Users>();foreach (DataRow dr in dt.Rows){Users user = new Users();erID = (int)dr["ID"];erName = dr["username"].ToString();user.Password = dr["password"].ToString();list.Add(user);}return list;}}}2)DiaryBLL(业务逻辑层)新建一个UserManage.cs类,具体代码如下:using System;using System.Collections.Generic;using System.Text;using System.Data;using DiaryModel;namespace DiaryBLL{public class UserManage{public static bool Add(Users user){return erService.Add(user);}public static bool Delete(int UserID){return erService.Delete(UserID);}public static bool Modify(Users user){return erService.Modify(user);}public static List<Users> GetAllUsers(){return erService.GetAllUsers();}}}<%@Page Language="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default" %><!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title>无标题页</title></head><body><form id="form1"runat="server"><div>用户列表:<br/><asp:GridView ID="GridView1"runat="server"AutoGenerateColumns="False"BackColor="White"BorderColor="#CCCCCC"BorderStyle="None"BorderWidth="1px"CellPadding="3"PageSize="4"Width="778px"OnRowDeleting="GridView1_RowDeleting" OnRowDataBound="GridView1_RowDataBound"OnRowEditing="GridView1_RowEditing" OnRowCancelingEdit="GridView1_RowCancelingEdit"OnRowUpdating="GridView1_RowUpdating"> <FooterStyle BackColor="White"ForeColor="#000066"/><RowStyle ForeColor="#000066"/><Columns><asp:TemplateField HeaderText="用户ID"><ItemTemplate><asp:Label ID="Label1"runat="server"Text='<%# Bind("UserID") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="用户名"><EditItemTemplate><asp:TextBox ID="TextBox2"runat="server"Text='<%# Bind("UserName") %>'></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label ID="Label2"runat="server"Text='<%# Bind("UserName") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="密码"><EditItemTemplate><asp:TextBox ID="TextBox3"runat="server"Text='<%# Bind("Password") %>'></asp:TextBox></EditItemTemplate><ItemTemplate><asp:Label ID="Label3"runat="server"Text='<%# Bind("Password") %>'></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="操作"ShowHeader="False"><EditItemTemplate><asp:LinkButton ID="LinkButton1"runat="server"CausesValidation="True" CommandName="Update"Text="更新"></asp:LinkButton><asp:LinkButton ID="LinkButton2"runat="server"CausesValidation="False" CommandName="Cancel"Text="取消"></asp:LinkButton></EditItemTemplate><ItemTemplate><asp:LinkButton ID="LinkButton1"runat="server"CausesValidation="False" CommandName="Edit"Text="编辑"></asp:LinkButton><asp:LinkButton ID="LinkButton2"runat="server"CausesValidation="False" CommandName="Delete"OnClientClick="javascript:return confirm('确认要删除么?');"Text="删除"></asp:LinkButton></ItemTemplate></asp:TemplateField></Columns><PagerStyle BackColor="White"ForeColor="#000066"HorizontalAlign="Left"/><SelectedRowStyle BackColor="#669999"Font-Bold="True"ForeColor="White"/><HeaderStyle BackColor="#006699"Font-Bold="True"ForeColor="White"/></asp:GridView></div><br/><br/><br/>添加用户<br/>用户名:<asp:TextBox ID="tb_username"runat="server"></asp:TextBox><br/>密码: <asp:TextBox ID="tb_pwd"runat="server"></asp:TextBox><br/><asp:Button ID="Button1"runat="server"Text="添加"OnClick="Button1_Click"/> </form></body></html>后台代码如下所示:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using DiaryModel;public partial class_Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){Bind();}}protected void Bind(){GridView1.DataSource = erManage.GetAllUsers();GridView1.DataBind();}protected void Button1_Click(object sender, EventArgs e)Users user = new Users();erName = this.tb_username.Text.ToString().Trim();user.Password = this.tb_pwd.Text.ToString().Trim();bool bol=erManage.Add(user);if (bol){Response.Redirect("Default.aspx");}}protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e){int UserID = Convert.ToInt32((GridView1.Rows[e.RowIndex].FindControl("Label1") as Label).Text);bool bol = erManage.Delete(UserID);if (bol){Bind();}else{Response.Write("<script>alert('删除失败');location.href=Default.aspx;</script>");}}protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){if (e.Row.RowType == DataControlRowType.DataRow){LinkButton lb = e.Row.FindControl("LinkButton2") as LinkButton;if (lb.Text == "删除"){lb.Attributes.Add("onclick", "return confirm('确认要删除么?');");}}}///<summary>///让当前处于修改状态///</summary>///<param name="sender"></param>///<param name="e"></param>protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e){GridView1.EditIndex = e.NewEditIndex;Bind();}///<summary>///让当前行处于绑定状态///</summary>///<param name="sender"></param>///<param name="e"></param>protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e){GridView1.EditIndex = -1;Bind();}///<summary>///更新至数据库///</summary>///<param name="sender"></param>///<param name="e"></param>protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e){Users user = new Users();erID = Convert.ToInt32((GridView1.Rows[e.RowIndex].FindControl("Label1") as Label).Text);erName = (GridView1.Rows[e.RowIndex].FindControl("TextBox2") as TextBox).Text.ToString();user.Password = (GridView1.Rows[e.RowIndex].FindControl("TextBox3") as TextBox).Text.ToString();bool bol = erManage.Modify(user);if (bol){Response.Write("<script>alert('修改成功');</script>");GridView1.EditIndex = -1;Bind();}else{Response.Write("<script>alert('修改失败');</script>");}}。
.NET经典三层架构-表示层更新数据
Console.WriteLine("A:添加数据
---------");
Console.WriteLine("B:更新数据
---------");
Console.WriteLine("C:删除数据
---------");
Console.WriteLine("D:查询数据
---------");
Console.WriteLine("Q:退出系统
Console.Write("请输入更新的Id值:"); int id = int.Parse(Console.ReadLine()); Console.Write("请输入学生的姓名:"); var name = Console.ReadLine(); Console.Write("请输入学生的年龄:"); var age = Console.ReadLine(); Console.Write("请输入学生的性别(男/女):"); var sex = Console.ReadLine(); Console.Write("请输入学生的地址:");
据。
3/6
.NET 经典三层架构深入编程-第 11 单元-表示层-更新数据
第3节. 调用代码
在 Menu 类中调用一下更新学生的代码:
public class Menu
{
public static void Show()
{
Console.WriteLine("----------------------------------");
第五天--《2014-07-21三层架构》--在DataGridView控件上直接修改和U。。。
第五天--《2014-07-21三层架构》--在DataGridView控件上直接修改和U。
⼀、上午《01、修改dgv控件中下拉列表的添加》--《03、添加了ValueMenber之后列绑定属性的修改》1、将DataGridView中的列指定为需要的类型。
如下图:创建DataGridViewColumn时需要指定为真正需要的⼦类型。
这样才能更好地编辑⾏数据。
这些类型有:Button、CheckBox、ComboBox、Image、Link、TextBox 这些⼦类型的列,正如其名。
与同名的单独控件有类似的属性、功能和事件。
⽐如DataGridViewButtonColumn就像⼀个Button控件;⽽DataGridViewComboBoxColumn就像⼀个ComboBox控件,可以绑定下拉列表的数据源,可以指定项应该显⽰绑定对象的什么属性,选中值应该对应绑定对象的什么属性。
等等。
2、指定下拉项的数据源。
如以下代码:1//在DataGridView表格控件绑定数据源之前,先绑定下拉列表列的数据源。
如此⼀来,⽤户编辑该列时,可以下拉选择可选项。
2var column = this.dgvList.Columns["cname"] as DataGridViewComboBoxColumn;//注意:表格列名 = 数据库列名 = 实体类属性名。
推荐这样的命名⽅式。
必须将列显式转为⼦类型。
3if (column != null)4 {5 column.DisplayMember = "cname"; //显⽰值。
即绑定实体对象的属性名。
6 column.ValueMember = "cid";//实际值有更⾼的优先级,如果同时指定了这两项属性,那么真正的对应字段是ValueMember.以后拿出来进⾏匹配的就是cid值。
与之匹配的也必须是对应类型和意义的字段或者属性名称7 column.DataSource = cm.GetAllClassesList(false);//BLL层通过DAL层获取实体对象集合——“班级表”的查询结果集8 column.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;//⾮编辑时,不显⽰下拉按钮9 }1011this.dgvList.DataSource = pm.GetAllPersonList(false);//DataGridView绑定数据源(BLL层从DAL层获取的实体对象集合)注意:ValueMember指定属性的数据类型必须与该列的绑定数据源属性的数据类型⼀致。
mvc三层架构增删改查实例
一、前言MVC三层架构是一种常用的软件开发模式,能够将业务逻辑、数据处理和用户界面分离,提高软件的可维护性和可扩展性。
本文将以一个简单的增删改查实例为例,介绍MVC 三层架构的基本概念和实现方法。
二、实例介绍我们假设有一个学生信息管理系统,需要实现以下功能:1. 显示所有学生信息2. 添加新的学生信息3. 修改已有的学生信息4. 删除指定的学生信息其中,学生信息包括学号、姓名、性别、年龄等基本信息。
三、MVC三层架构介绍MVC三层架构将软件分为三层,分别是模型层(Model)、视图层(View)和控制层(Co ntroller)。
1. 模型层:负责数据的处理和业务逻辑的实现,通常包括数据库访问、数据处理和业务逻辑等。
2. 视图层:负责用户界面的显示和用户交互的实现,通常包括HTML页面、CSS样式和Java Script脚本等。
3. 控制层:负责模型层和视图层之间的协调和控制,通常包括URL路由、请求处理和响应生成等。
四、实现步骤1. 数据库设计我们首先需要设计一个学生信息表,包括学号、姓名、性别、年龄等字段。
可以使用MyS QL或其他关系型数据库进行设计和实现。
2. 模型层实现我们使用Java语言实现模型层,包括数据访问和业务逻辑的实现。
可以使用JDBC或ORM 框架(如Hibernate、MyBatis等)进行数据库访问和操作。
3. 视图层实现我们使用HTML、CSS和JavaScript等技术实现视图层,包括学生信息的显示、添加、修改和删除等功能。
可以使用jQuery等JavaScript库进行开发。
4. 控制层实现我们使用Java语言实现控制层,包括URL路由、请求处理和响应生成等功能。
可以使用Ser vlet、Spring MVC等框架进行开发。
五、实现细节1. 数据库连接池的使用为了提高数据库访问的效率和稳定性,我们可以使用数据库连接池技术,避免频繁地打开和关闭数据库连接。
2. 事务管理的实现为了保证数据的一致性和完整性,我们需要使用事务管理技术,将一系列数据库操作作为一个整体进行提交或回滚。
gridview 编辑,删除,更新的用法
/blog/article.asp?id=585/liping13599168/archive/2007/12/16/996526.ht ml<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewUp.aspx.cs" Inherits="gridview_GridViewUp" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title>ÎÞ±êÌâÒ³</title></head><body><form id="form1" runat="server"><div><table cellpadding="0" cellspacing="0" border="0" width="80%" style="font-size: 11px"><tr><td align="center"><asp:GridView ID="GridView1" runat="server" Width="100%" CellPadding="4" ForeColor="#333333"AutoGenerateColumns="False"AllowPaging="True" PageSize="12" OnRowCancelingEdit="GridView1_RowCancelingEdit"OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"OnRowDeleting="GridView1_RowDeleting"DataKeyNames="id,name"OnPageIndexChanging="GridView1_PageIndexChanging"DataMember="card,price" OnRowDataBound="GridView1_RowDataBound" GridLines="None"><Columns><asp:BoundField HeaderText="Éí·ÝÖ¤ºÅ" DataField="card" Visible=false /><asp:BoundField HeaderText="±àºÅ" DataField="id" ReadOnly="True" /><asp:BoundField DataField="name" HeaderText="ÐÕÃû" ReadOnly="True" /><asp:TemplateFieldHeaderText="Éí·ÝÖ¤ºÅ"><ItemTemplate><%# Eval("card") %></ItemTemplate><EditItemTemplate><asp:TextBox ID="TBCard" Text='<%# Eval("card") %>' runat="server" Width="140px" /></EditItemTemplate><ItemStyle Width="150px" /></asp:TemplateField><asp:TemplateField HeaderText="ѧÀú"><ItemTemplate><%# Eval("description")%></ItemTemplate><EditItemTemplate><asp:HiddenField ID="HDFXueli" runat="server" Value='<%# Eval("xueli") %>' /><asp:DropDownList ID="DDLXueli" runat="server" Width="90px" /></EditItemTemplate><ItemStyle Width="100px" /></asp:TemplateField><asp:TemplateField HeaderText="¼Û¸ñ"><ItemTemplate><%# Eval("price") %></ItemTemplate><EditItemTemplate><asp:TextBox ID="TBPrice" Text='<%# Eval("price") %>' runat="server" Width="90px" /></EditItemTemplate><ItemStyle Width="100px" /></asp:TemplateField><asp:BoundField HeaderText="½¨Á¢Ê±¼ä" DataField="createdate" ReadOnly="True" /><asp:CommandFieldShowDeleteButton="True" ShowEditButton="True" HeaderText="²Ù×÷" /> </Columns><PagerSettings FirstPageText="" LastPageText="" NextPageText="" PreviousPageText="" /><RowStyle Height="20px" BackColor="#F7F6F3" ForeColor="#333333" /><FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /><EditRowStyle BackColor="#999999" /><SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /><PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /><HeaderStyle BackColor="#5D7B9D"Font-Bold="True" ForeColor="White" /><AlternatingRowStyle BackColor="White" ForeColor="#284775" /></asp:GridView></td></tr></table></div></form></body></html>GridViewUp.aspx.csÎļþ´úÂ룺using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;public partial class gridview_GridViewUp : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){GridViewBind();}}protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e){GridView1.PageIndex = e.NewPageIndex;GridViewBind();}private void GridViewBind(){string connStr = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionStr ing;string SqlStr = "Select a.*,b.description FROM test01 a,xueli b where a.xueli=b.code and a.id<1000 and a.id>200";DataSet ds = new DataSet();try{SqlConnection conn = new SqlConnection(connStr);if (conn.State.ToString() == "Closed") conn.Open();SqlDataAdapter da = new SqlDataAdapter(SqlStr, conn);da.Fill(ds, "test01");if (conn.State.ToString() == "Open") conn.Close();GridView1.DataSource = ds.Tables[0].DefaultView;GridView1.DataBind();}catch (Exception ex){Response.Write("Êý¾Ý¿â´íÎ󣬴íÎóÔ-Òò£º" + ex.Message);Response.End();}}protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){if (((DropDownList)e.Row.FindControl("DDLXueli")) != null){DropDownList ddlxueli = (DropDownList)e.Row.FindControl("DDLXueli");// Éú³É DropDownList µÄÖµ£¬°ó¶¨Êý¾Ýstring connStr = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionStr ing;string SqlStr = "Select * from xueli";DataSet ds = new DataSet();SqlConnection conn = new SqlConnection(connStr);if (conn.State.ToString() == "Closed") conn.Open();SqlDataAdapter da = new SqlDataAdapter(SqlStr, conn);da.Fill(ds, "xueli");if (conn.State.ToString() == "Open") conn.Close();ddlxueli.DataSource = ds.Tables[0].DefaultView;ddlxueli.DataTextField = "description";ddlxueli.DataValueField = "code";ddlxueli.DataBind();//// Ñ¡ÖÐ DropDownListddlxueli.SelectedValue = ((HiddenField)e.Row.FindControl("HDFXueli")).Value;//}}protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e){GridView1.EditIndex = e.NewEditIndex;GridViewBind();}protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e){GridView1.EditIndex = -1;GridViewBind();}protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e){string id = GridView1.DataKeys[e.RowIndex].Values[0].ToString();string card = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TBCard")).Text; string xueli = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("DDLXueli")) .SelectedValue;string price = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TBPrice")).Text;string connStr = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionStr ing;。
ASP.NET三层架构步骤讲解
三层架构步骤讲解前言:与ASP相比在Web应用开发上无疑更容易,更有效率。
Web开发大部分还是围绕着数据操作,建立数据库存储数据,编写代码访问和修改数据,设计界面采集和呈现数据。
走过学习入门阶段后,真正开始着手开发一个Web项目时,才发现错综复杂的数据与关联根本就不是SqlDataSource和AccessDataSource数据源控件能简单解决的,而恰恰是被忽视了的一个ObjectDataSource数据源控件才是真正踏入开发门槛的关键,由此也对三层架构模式有了初步体验。
一.三层架构介绍设计模式中的分层架构(可以参考一下J2EE中MVC模式)实现了各司其职,互不干涉,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
这样就能更好的实现开发中的分工,有利于组件的重用。
所以这些年关于模式的研究有很多成果,应用也很广泛。
一个好的模式在程序开发和后期维护中作用重大。
三层架构自底向上分为:数据访问层(DAL),业务逻辑层(BLL)和表示层(PL)。
数据访问层(DAL):使用了一个强类型的DataSet作为数据访问层,只是单纯的对数据进行增,删,改,查询和判断存在等等较通用的数据访问方法(由SQL语句来提供),不应该有“事务”存在。
业务逻辑层(BLL):业务逻辑层是在数据访问层和表示层之间进行数据交换的桥梁,按业务需求调用数据访问层中的方法组合,集合了各种业务规则到一个BLL中,例如通过条件进行判断的数据操作或“事务”处理。
BLL都是以类库(Class Library)的形式来实现的。
表示层(PL):表示层是为客户提供用于交互的应用服务图形界面,帮助用户理解和高效地定位应用服务,呈现业务逻辑层中传递的数据,用页面来实现。
二.三层架构应用实现随着 的不断升级,可以很方便的使用 来构建B/S 三层架构的应用程序,下面以“教师业务信息管理系统”项目中的部分例子来演示如何使用 2.0 和SQL Server 2005数据库来构建一个三层架构的应用程序。
winform datagridview控件用法
winform datagridview控件用法Winform DataGridView 控件用法详解一、简介Winform DataGridView 控件是 .NET Framework 中提供的一个强大的数据显示和编辑控件。
它可以显示和编辑多种类型的数据(如文本、数字、日期、图像等),并且提供了丰富的功能和灵活的样式设置,可以方便地实现数据的展示、排序、筛选、编辑、分页等操作。
二、绑定数据源1. 绑定数据集可以通过设置DataGridView 的DataSource 属性来绑定一个数据集(DataSet)或数据表(DataTable)。
在Visual Studio 的设计器中,通过选择数据源和数据成员来实现绑定,也可以通过代码实现。
例如:dataGridView1.DataSource = dataSet.Tables["TableName"];2. 绑定数据集合除了绑定数据集,还可以绑定数据集合(如List<T>、BindingList<T> 等)。
在数据集合发生变化时,DataGridView 会自动更新显示的数据。
例如:List<User> userList = new List<User>();dataGridView1.DataSource = userList;3. 动态绑定数据绑定数据源后,可以通过设置DataGridView 的AutoGenerateColumns 属性为true,自动根据数据源的结构创建列。
也可以通过手动添加列来控制显示的列数和顺序。
例如:dataGridView1.AutoGenerateColumns = true;三、设置列样式1. 自动调整列宽可以通过设置DataGridView 的AutoSizeColumnsMode 属性来调整列宽。
通常选择AllCells 或Fill,前者会根据列中的内容调整列宽,后者会填充整个控件。
GridView1 删除、修改(字段类型全而且用GridView集成处理)
张家口教育学院教育技术中心 第 1 页 共 21 页删除、修改记录(字段类型全、GridView 集成处理、双向排序、翻页、绑定列)2010.10.30学习内容:TemplatedField 模板列技术、使用绑定列技术、鼠标所在行颜色提示、绑定列中使用下拉列表框、设置字段的ControlStyle 属性运行态1. 在VS2008中建立Web项目。
2. 在Windows环境下将数据库jyxystu.mdf(命名含义为教育学院学生)和jyxystu.ldf拷贝到项目的App_Data目录下,并在VS中添加的项目中。
张家口教育学院教育技术中心第2 页共21 页3. 在SQL Server 2000中附加数据库jyxystu.mdf。
4. 在数据库中建立一个表:tb_zg(命名含义为职工表,以tb开头意思是本对象是一个表),表结构如下:5. 录入若干条记录(为了看出效果,记录数至少20条)6. 修改web.config文件,(1) 删除</configSections>下方的<appSettings/>(2) 在</configSections>位置下增加:张家口教育学院教育技术中心第3 页共21 页<appSettings><add key="ConnStr" value="Server=localhost;uid=sa;pwd=;database=jyxystu"></add>7. 在项目中添加Web窗体mygridview.aspx(文件名含义为按类查询)8. 布局控件如下:一个GridView,在GridView下方有两个label,准备显示第x页共y页。
ID属性分别是Label1和Label2。
GridView1自动套用格式为"雪松"。
AutoGenerateColumns="False"AllowSorting="True"AllowPaging="True"PageSize="10"因为要采用分页技术所以需要再设置PagerSettings属性FirstPageText="首页"LastPageText="尾页"NextPageText="下一页"PreviousPageText="上一页"Mode="NextPreviousFirstLast"把GridView中的FontSize设为small。
Winform(DataGridView)控件及通过此控件中实现增删改查
Winform(DataGridView)控件及通过此控件中实现增删改查:显⽰数据表,通过此控件中可以实现连接数据库,实现数据的增删改查⼀、后台数据绑定:List<xxx> list = new List<xxx>();dataGridView1.DataSource = list;//设置不⾃动⽣成列,此属性在属性⾯板中没有dataGridView1.AutoGenerateColumns = false;//取消加载默认选中第⼀⾏dataGridView1.ClearSelection();⼆、前台:⼩三⾓箭头,取消可编辑,添加,删除功能;Columns集合属性中,添加列HeaderText中设置显⽰的⽂本DataPropertyName设置绑定的字段名或数据库列名SelectionMode --设置选择⽅式,FullRowSelect只能选中⾏MultiSelect --是否可以选中多⾏内容三、取值:取出选中的单元格的值:dataGridView1.SelectedCells中放着全部选中的单元格if(dataGridView1.SelectedCells.Count > 0){MessageBox.Show(dataGridView1.SelectedCells[0].Value.ToString());}取出选中的⾏内容:if(dataGridView1.SelectedRows.Count > 0){MessageBox.Show(dataGridView1.SelectedRows[0].Cells[0].ToString());}获取⽤于填充⾏绑定的对象://⾏对象使⽤属性:DataBoundItemstudent sss = dataGridView1.SelectedRows[0].DataBoundItem as student;四、删除加确认MessageBoxButtons btn = MessageBoxButtons.YesNoCancel;if (MessageBox.Show("确定要删除么?", "删除数据", btn) == DialogResult.Yes){}五、多条件查询如果⽤户什么都不输⼊,或者⽂本框是空,这时候是查询所有//做两个恒成⽴的条件string tj1 = " 1=1 ";string tj2 = " 1=1 ";//根据⽤户输⼊来改变条件//如果⽤户输⼊了姓名if (name != ""){tj1 = " Name like @name ";}//如果⽤户输⼊了民族if (nation != ""){tj2 = " Nation = @nation ";}//拼接成完整条件string ztj = " where "+tj1+" and "+tj2;。
.net三层架构详解
BLL负责处理业务逻辑。通过获取UI传来的 操作指令,决定执行业务逻辑,在需要访 问数据源的时候直接交给DAL处理。处理完 成后,返回必要数据给UI。
具体应用——Assembly
DAL/BLL/UI分别在不同的程序集中 各个层之间的引用关系
三层结构程序设计
三层结构概述 显示层View/UI 业务逻辑层BLL(Business Logic Layer) 数据访问层DAL(Data Access Layer) 在具体项目中的应用
多层结构的划分方式:物理/逻辑 两层/三层结构 物理上的三层:显示层/业务层/数据层 (客户PC;应用服务器;数据库服务器)
UI -> BLL -> DAL
DAL所在程序集不引用BLL和UI BLL需要引用DAL UI直接引用BLL,可能会间接引用DAL
一个Windows Form项目
通过一个实际的Windows应用程序说明如何搭建 三层架构
UI设计的原则
用户至上,兼顾简洁
显示层业务逻辑层BLL作用从DAL中获取数据,以供UI显示用 从UI中获取用户指令和数据,执行业务逻辑 从UI中获取用户指令和数据,通过DAL写入数据源
BLL的职责机制
UI->BLL->UI UI->BLL->DAL->BLL->UI
具体应用——原则
DAL只提供基本的数据访问,不包含任何业 务相关的逻辑处理;
三层结构概述
逻辑上划分 VS 物理上划分
物理:显示层/业务层/数据层 逻辑:UI/BLL+DAL/DB
我们讨论的三层结构: UI、BLL、DAL、DB
三层结构概述
GridView控件详细讲解
GridView控件详细讲解GridView是 1.x的DataGrid控件的后继者。
它提供了相同的基本功能集,同时增加了大量扩展和改进。
如前所述,DataGrid( 2.0仍然完全支持)是一个功能非常强大的通用控件。
然而,它有一个重大缺陷:它要求我们编写大量定制代码,甚至处理比较简单而常见的操作,诸如分页、排序、编辑或删除数据等也不例外。
GridView控件旨在解决此限制,并以尽可能少的数据实现双向数据绑定。
该控件与新的数据源控件系列紧密结合,而且只要底层的数据源对象支持,它还可以直接处理数据源更新。
这种实质上无代码的双向数据绑定是新的GridView控件最著名的特征,但是该控件还增强了很多其他功能。
该控件之所以比DataGrid控件有所改进,是因为它能够定义多个主键字段、新的列类型以及样式和模板选项。
GridView还有一个扩展的事件模型,允许我们处理或撤销事件。
GridView控件为数据源的内容提供了一个表格式的类网格视图。
每一列表示一个数据源字段,而每一行表示一个记录。
该类声明如下:public class GridView : CompositeDataBoundControl,ICallbackContainer,ICallbackEventHandler该基类确保数据绑定和命名容器支持。
ICallbackContainer和ICallbackEventHandler接口提供了比现在支持的更有效的分页和排序功能。
它通过使用新的脚本回调技术的客户端的out-of-band调用来完成。
(稍候将会更详细地讨论这一点。
)首先让我们来看看GridView控件的编程接口。
1. GridView控件的属性GridView支持大量属性,这些属性属于如下几大类:行为、可视化设置、样式、状态和模板。
表10.6详细描述了影响的行为的属性。
表10.6 GridView控件的行为属性属性描述AllowPaging 指示该控件是否支持分页。
GridView、DetailsView 显示控件增删改
使用GridView、DetailsView 服务器控件在网页上编辑和插入数据通过使用封装数据访问的数据源控件与以可编辑格式显示记录的DetailsView 和GridView 控件的组合,可以创建一个允许用户编辑现有记录或插入新记录的数据输入页,所有操作均无需代码。
1、创建网站和网页创建解决方案文件夹和一个名为Default.aspx 的新页。
2、配置SqlDataSource连接到SQL Server拖一SqlDataSource控件至页面中,然后,并单击“显示智能标记”。
出现“数据源配置向导”对话框。
在“选择数据源类型”下单击“数据库”。
保留默认名称“SqlDataSource1”,然后单击“确定”。
“配置数据源”向导显示“选择连接”页。
在“应用程序连接数据库应使用哪个数据连接?”框中输入在“创建与SQL Server 的连接”中创建的连接,然后单击“下一步”。
该向导显示一页,从该页中您可以选择将连接字符串存储到配置文件中。
将连接字符串存储在配置文件中有两个优点:(1)比将它存储在页面中更安全。
(2)可以在多个页面中使用相同的连接字符串。
选择“是,将此连接另存为”复选框,然后单击“下一步”。
该向导显示一页,从该页中您可以指定要从数据库中检索的数据。
在“配置Select 语句”页上选择“指定来自表或视图的列”,然后在“名称”框中单击“雇员”。
在“列”下,选中“EmployeeID”、“Lastname”、“Firstname”和“HireDate”复选框,然后在“配置Select 语句”页上单击“高级”,选中“生成INSERT、UPDATE 和DELETE 语句”复选框,然后单击“确定”。
注意可以通过选择“指定自定义SQL 语句或存储过程”并输入SQL 查询来手动创建语句。
您可以选择SqlDataSource 控件并查看DeleteQuery、InsertQuery 和UpdateQuery 属性,以便检查由向导生成的语句。
.net中三层架构详细讲解笔记
.net中三层架构详细讲解笔记关于在.NET中DAL+IDAL+Model+BLL+Web其实三层架构是⼀个程序最基本的在.Net开发中通常是多层开发⽐如说BLL就是business Logic laywer(业务逻辑层)他只负责向数据提供者也就是DAL调⽤数据然后传递给客户程序也就是UI DAL就是(data access laywer)数据访问层,负责对实体也就是数据库相应表的增删改查IDAL它体现了“抽象”的精神,或者说是“⾯向接⼝编程”的最佳体现。
抽象的接⼝模块(IDAL) Model: 实体层数据库中表的映射,⼀般有⼏个表就有⼏个实体类DBUtility: 数据库应⽤层common:常⽤处理组件层web:(Web)⽹站项⽬在程序中调⽤BLL,BLL中调⽤DAL创建⽅法:菜单-》⽂件-》新增-》新建项⽬然后可以选择建⽴⼀个类库,也就是BLL,DAL。
如果要新建⽹站的话同理。
建⽴之后可以在⼀个项⽬中引⽤某个类库,注意引⽤顺序。
引⽤完成后就可以查看项⽬依赖项的依赖关系了/doc/70163d614693daef5ff73d4a.html ⾥的三层架构感觉类似于J2EE⾥的MVC模式也就是把结构分层为Model层(负责与后台数据通信⼀般⽤LINQ)View层(负责前台的表现)Control层(负责业务逻辑的处理).既然是三层,肯定在物理逻辑上就要进⾏区分的,因此在项⽬⽂件夹下,有WebUI、BLL、DAL、Common这四个⽂件夹和Default.aspx等⾸页⽂件,其实最主要的就是前三个⽂件夹,Common⽂件夹⾥保存了⼀些样式⽂件和JS⽂件,个⼈感觉这些⽂件可以放到WebUI⾥的。
o(∩_∩)o...,这⼏个⽂件夹⽤来作什么应该从命名上能看出来吧?WebUI⽤来保存页⾯⽂件,也就是⼤家在浏览⽹页的时候能看见的,最直观的,也是这三层中最简单的;BLL⽤来保存业务逻辑,起到⼀个承上启下的作⽤,⽤来连接WebUI层和DAL层,主要是定义⼀些⽅法,相对来讲⽐WebUI要复杂;DAL⽂件夹主要是保存对数据库操作的⼀些⽂件,主要是对⼀些SQL语句(存储过程)的执⾏。
.NET三层架构与三层架构下GridView控件增删改操作详解
.NET三层架构与三层架构下GridView控件增删改操作详解(一)所谓三层架构(3-tier application)就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
区分层次的目的即为了“高内聚、低耦合”的思想。
1、表现层(UI):主要是指与用户交互的界面,用于显示数据和接受用户输入的数据,将用户输入的数据传递给业务逻辑层,一般不包含任何实际的业务处理,当业务逻辑层的数据发生变化时,表示层就会显示出更新的结果。
表示层提供应用程序的用户界面,通常为Windows 应用程序或Web应用程序。
2、业务逻辑层(BLL):是表示层和数据访问层之间的桥梁,它代表应用程序的核心功能,负责处理数据层的数据,实现业务逻辑。
业务逻辑层通常为类库。
3、数据访问层(DAL):主要实现对数据的保存和读取操作,将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库中。
数据访问层可以访问关系数据库、文本文件或者XML文档,通常为类库。
三层架构对应的图如下图所示:为了更好地让初学者轻松入门,这里仍然采用趣味性的方式聊一些常用技术点,致力于.NET 新手们的快速提高!知识都是普通的,关键是学习的思路。
技术源于生活,技术原来可以这样学。
抛砖引玉而已。
层次结构在现实社会里随处可见。
记得有个笑话讲有个村长得意地向他老婆吹牛:“全中国只有四个人比我官大,乡长、县长、省长和国务院总理”。
这个笑话也体现了真实社会中分层的现象。
社会人群会分层,公司人员结构也会分层,楼房是分层的,甚至做包子的笼屉都是分层的。
虽然分层的目的各有不同,但都是为解决某一问题而产生的。
所以,分层架构其实是为了解决某一问题而产生的一种解决方案。
1、常用的三层架构设计软件系统最常用的一般会讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等,有的还要细一些,通过分解业务细节,将不同的功能代码分散开来,更利于系统的设计和开发,同时为可能的变更提供了更小的单元,十分有利于系统的维护和扩展。
三层架构之基础篇(对数据库增删改查)
三层架构之基础篇(对数据库增删改查)在上⼀篇中已经搭建好了⼀个三层架构的框架,现在使⽤三层架构来对数据库进⾏增删改查操作:假设在数据库ItcastCater有⼀张表ManagerInfo,有如下⼏个字段我们知道在UI,BLL,DAL之间有数据的交互,所以我们传递的数据需要有⼀个类型,因为我们操作的是ManagerInfo表,所以咱们可以在Model这⾥建⼀个类名为ManagerInfo的类,在这⾥定义的属性需要和ManagerInfo表中的字段⼀⼀对应。
我们知道DAL是处理和数据库相关的操作,出了这个层就不在有和数据库相关的代码,所以我们需要封装⼀个SqlHelper类,⽤于数据库的操作。
可以封装成⼀个静态类,作为⼯具类使⽤。
同时,我们现在处理的是ManagerInfo这个表,以后也会操作其他的表,遵循单⼀原则,所以需要在DAL中建⼀个专门处理ManagerInfo表的类ManagerInfoDal,相应的在BLL中需要⼀个处理ManagerInfo表业务逻辑的类ManagerInfoBll。
到这⾥所有的准备⼯作已经完成。
(注意:我们使⽤的数据库是SQLite,所以在数据库操作那部分⽤的都是SQLite⾃带的类和对象)1.查询操作:从最底层DAL开始写起(SQLiteHelper):1public static class SQLiteHelper2 {3//连接字符串4static string strConn = ConfigurationManager.ConnectionStrings["Cater"].ConnectionString;5#region查询数据 +DataTable GetList(string sql)6///<summary>7///查询数据8///</summary>9///<param name="sql">查询字符串</param>10///<returns></returns>11public static DataTable GetList(string sql)12 {13//创建连接对象14using (SQLiteConnection conn = new SQLiteConnection(strConn))15 {16//创建桥接对象17 SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);18//创建表对象19 DataTable table = new DataTable();20//将数据缓存到表格中21 adapter.Fill(table);22//返回数据23return table;24 }25 }26#endregion27 }查询数据接着是ManagerInfoDal类中查询代码1//由于出了DAL层就不允许有和数据库相关的代码,所以在这⾥返回的不是DataTable ,需要返回⼀个数据类型,在UI层接收时,使⽤⾯向对象来对数据进⾏操作2public List<ManagerInfo> GetList()3 {4 DataTable table = SQLiteHelper.GetList("select * from managerinfo");5 List<ManagerInfo> list = new List<ManagerInfo>();6foreach (DataRow row in table.Rows)7 {8//对象初始化器9 list.Add(new ManagerInfo()10 {11 Mid = Convert.ToInt32(row["mid"]),12 MName = row["mname"].ToString(),13 MPwd = row["mpwd"].ToString(),14 MType = Convert.ToInt32(row["mtype"])15 });16 }17return list;1819 }查询数据ManagerInfoBll中查询数据库的代码:1///<summary>2///数据查询3///</summary>4///<returns></returns>5public List<ManagerInfo> GetList()6 {7return miDal.GetList();8 }查询数据BLL在前端调⽤的时候只需要创建ManagerInfoBll对象,调⽤其查询数据⽅法即可。
Asp.net中GridView使用详解
中GridView使⽤详解 ------------------------------------------------⽬录-------------------------------------------------1、GridView⽆代码分页排序2、GridView选中,编辑,取消,删除3、GridView正反双向排序4、GridView和下拉菜单DropDownList结合5、GridView和CheckBox结合6、⿏标移到GridView某⼀⾏时改变该⾏的背景⾊⽅法⼀7、⿏标移到GridView某⼀⾏时改变该⾏的背景⾊⽅法⼆8、GridView实现删除时弹出确认对话框9、GridView实现⾃动编号10、GridView实现⾃定义时间货币等字符串格式11、GridView实现⽤“...”代替超长字符串12、GridView⼀般换⾏与强制换⾏13、GridView显⽰隐藏某⼀列14、GridView弹出新页⾯/弹出新窗⼝15、GridView固定表头(不⽤javascript只⽤CSS,2⾏代码,很好⽤)16、GridView合并表头多重表头⽆错完美版(以合并3列3⾏举例)17、GridView突出显⽰某⼀单元格(例如⾦额低于多少,分数不及格等)18、GridView加⼊⾃动求和求平均值⼩计19、GridView数据导⼊Excel/Excel数据读⼊GridView--------------------------------正⽂--------------------------------1.GridView简单代码分页排序:1.AllowSorting设为True,aspx代码中是AllowSorting="True";2.默认1页10条,如果要修改每页条数,修改PageSize即可,在aspx代码中是PageSize="12"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 添加类库的引用关系 DiaryBLL 添加 DiaryDAL 和 DiaryModel,如下图所示:
DiaryDAL 添加 DiaryModel,如下图所示:
表示层 Web 添加上述三个,如下图所示: 4 类库中类的编写
架构在使用过程中的一些演化过程。那么,为什么要这样分层,每层结构到底又起什么作用 呢?我们继续往下看。
2、 趣味理解:三层架构与养猪 看新闻报道今年猪肉价格一路高涨,据说有人养猪都发财致富奔小康了,程序员都说写 代码没前途了,还不如去养猪,不过,可别认为养猪没有技术含量,比写代码容易,其实养 猪也大有学问。为了更好地理解三层架构,就拿养猪来做个例子吧。俗话说:“没吃过猪肉, 还没见过猪跑啊!”。 图 4 是三层架构化的养猪产业流水线趣味对此图。
上面谈了那么多,有人会问,我直接从数据库取出内容直接操作不可以吗?为什么要这 么麻烦地用三层架构呢?三层架构到底有什么好处呢?
不分层,当然可以,就好比整个过程不分屠宰场、加工场之类的,都在同一个场所(工 厂)完成所有的活(屠杀、加工、销售)。但为什么要加工厂和商场呢?因为当规模比较大的时 候,管理起来就会变得非常复杂,这样的养殖方式已经无法满足规模化的需要了。并且,从 社会的发展来看,社会分工是人类进步的表现。社会分工的优势就是让适合的人做自己擅长 的事情,使平均社会劳动时间大大缩短,生产效率显著提高。能够提供优质高效劳动产品的 人才能在市场竞争中获得高利润和高价值。人尽其才,物尽其用最深刻的含义就是由社会分 工得出的。软件开发也一样,做小项目的时候,分不分层确实看不出什么差别,并且显得更 麻烦啰嗦了。但当项目变大和变复杂时,分层就显示出它的优势来了。所以分不分层要根据 项目的实际情况而定,不能一概而论。
<html xmlns="/1999/xhtml" > <head runat="server">
<title>无标题页</title> </head> <body>
<form id="form1" runat="server"> <div>
用户列表:<br /> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
此时,三层架构会演变为如图 2 所示的情况。
图 2 三层架构演变结果 *业务实体 Model:用于封装实体类数据结构,一般用于映射数据库的数据表或视图, 用以描述业务中客观存在的对象。Model 分离出来是为了更好地解耦,为了更好地发挥分层 的作用,更好地进行复用和扩展,增强灵活性。 *通用类库 Common:通用的辅助工具类。 在 第 5.2 节 中 我 们 讲 过 可 以 将 对 数 据 库 的 共 性 操 作 抽 象 封 装 成 数 据 操 作 类 ( 例 如 DbHelperSQL),以便更好地复用和使代码简洁。数据层底层使用通用数据库操作类来访问数 据库,最后完整的三层架构如图 3 所示。
GridView 的设计过程如下: 拖放一个 GridView 控件到页面中,然后添加三个 BoundField 字段,HeaderText 属性分别为用户 ID、用户名、密码,
绑定字段分别为 ID,username,password,一个 CommandField 字段,显示编辑按钮和删除按钮,然后再将上述四个字段
图 4 三层结构与养猪 对比图 3 与图 4,我们可以看出: * 数据库好比猪圈,所有的猪有序地按区域或编号,存放在不同的猪栏里。 * DAL 好比是屠宰场,把猪从猪圈取出来进行(处理)屠杀,按要求取出相应的部位(字段), 或者进行归类整理(统计),形成整箱的猪肉(数据集),传送给食品加工厂(BLL)。本来这里都 是同一伙人既管抓猪,又管杀猪的,后来觉得效率太低了,就让一部分人出来专管抓猪了 (DBUtility),根据要求来抓取指定的猪。 * BLL 好比食品加工厂,将猪肉深加工成各种可以食用的食品(业务处理)。 * Web 好比商场,将食品包装成漂亮的可以销售的产品,展现给顾客(UI 表现层)。 * 猪肉好比 Model,无论是哪个厂(层),各个环节传递的本质都是猪肉,猪肉贯穿整个
日常开发的很多情况下为了复用一些共同的东西,会把一些各层都用的东西抽象出来。 如我们将数据对象实体和方法分离,以便在多个层中传递,例如称为 Model。一些共性的通 用辅助类和工具方法,如数据校验、缓存处理、加解密处理等,为了让各个层之间复用,也 单独分离出来,作为独立的模块使用,例如称为 Common。
点击查看 DBHelper 类 新建一个 UserService.cs 类,实现增删改查等相关操作,具体代码如下所示:
3)DiaryBLL(业务逻辑层) 新建一个 UserManage.cs 类,具体代码如下:
4 Web 网站的设计 为了实现三层架构下的增删改操作,我们用到了 GridView 控件,界面如下如所示:
为了更好地让初学者轻松入门,这里仍然采用趣味性的方式聊一些常用技术点,致力于.NET 新手们的快速提高!知识都是普通的,关键是学习的思路。技术源于生活,技术原来可以这 样学。抛砖引玉而已。
层次结构在现实社会里随处可见。记得有个笑话讲有个村长得意地向他老婆吹牛:“全 中国只有四个人比我官大,乡长、县长、省长和国务院总理”。这个笑话也体现了真实社会 中分层的现象。社会人群会分层,公司人员结构也会分层,楼房是分层的,甚至做包子的笼 屉都是分层的。虽然分层的目的各有不同,但都是为解决某一问题而产生的。所以,分层架 构其实是为了解决某一问题而产生的一种解决方案。
当然,这里只是形象的比喻,目的是为了让大家更好地理解,实际的情况在细节上会有 所不同。这个例子也只是说明了从猪圈到商场的单向过程,而实际三层开发中的数据交互是 双向的,可取可存。不过,据说有一种机器,把猪从这头赶进去,另一头就噗噗噜噜地出火 腿肠了。如果火腿肠卖不了了,从那头再放进去,这头猪又原原本本出来了,科幻的机器吧, 没想到也可以和三层结构联系上。以上只是笑谈,不过也使三层架构的基本概念更容易理解 了。
1)DiaryModel(业务实体层),新建一个 User 类 代码如下:
该类可以获得 User 类的各个字段。 2)DiaryDAL(数据访问层)
由于本层要用到数据库的相关操作,所以这里用到了微软封装的 DBHelper.cs 类。DBHelper 类访问了 Web 网站的配置文件, 获得连接字符串,DiaryDAL 要添加引用 System.configuration。Web 网站的 Web.config 文件相关代码如下: (将 DBHelper.cs 类纺织 DiaryDAL 目录下,要注意的是 DBHelper 类下的命名空间要改为 DiaryDAL)
NET 三层架构与三层架构下 GridView 控件增删改操作详解(二)
(由于代码过多文章发表不了,所以很多代码用截图表示)
1 新建一个数据库 test,新建一个表 Users,表中有如下字段(ID,username,password)。其中 ID 为表示字段。结构如下图:
2 新建三个类库 DiaryBLL(业务逻辑层),DiaryDAL(数据访问层),DiaryModel(业务实体层),将上述三个类库放至
图 3 最后完整的三层架构 数据库访问类是对 的封装,封装了一些常用的重复的数据库操作。如微软的 企业库 SQLHelper.cs,动软的 DBUtility/DbHelperSQL 等,为 DAL 提供访问数据库的辅助工具
类。 通过以上分析,我们知道如今常用的三层架构是个什么样子,同时,我们也知道了三层
转化为模板列。
Web 网站的设计
前台代码如下:பைடு நூலகம்
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-tran
图 1 常见的三层架构
* 数据访问层 DAL:用于实现与数据库的交互和访问,从数据库获取数据或保存数据到 数据库的部分。
* 业务逻辑层 BLL:业务逻辑层承上启下,用于对上下交互的数据进行逻辑处理,实现 业务目标。
* 表示层 Web:主要实现和用户的交互,接收用户请求或返回用户请求的数据结果的 展现,而具体的数据处理则交给业务逻辑层和数据访问层去处理。
<asp:TemplateField HeaderText="用户 ID"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("UserID") %>'></asp:Label> </ItemTemplate>
过程。
* 通用类库 Common 相当于工人使用的各种工具,为各个厂(层)提供诸如杀猪刀、绳子、 剪刀、包装箱、工具车等共用的常用工具(类)。其实,每个部门本来是可以自己制作自己的 工具的,但是那样会使效率比较低,而且也不专业,并且很多工作都会是重复的。因此,就 专门有人开了这样的工厂来制作这些工具,提供给各个工厂,有了这样的分工,工厂就可以 专心做自己的事情了。