1.NET三层架构与三层架构下GRIDVIEW控件增删改操作详解
- 格式:pdf
- 大小:589.87 KB
- 文档页数:15
三层架构下的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; }
}
///
///用户名///。
数据控件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添加一行新的数据,然后单击“更新设置”按钮,完成后关闭程序再打开。
: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>");}}。
第五天--《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 三层架构的基本概念和实现方法。
二、实例介绍我们假设有一个学生信息管理系统,需要实现以下功能: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. 事务管理的实现为了保证数据的一致性和完整性,我们需要使用事务管理技术,将一系列数据库操作作为一个整体进行提交或回滚。
/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相比在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 控件是 .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,前者会根据列中的内容调整列宽,后者会填充整个控件。
张家口教育学院教育技术中心 第 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)控件及通过此控件中实现增删改查:显⽰数据表,通过此控件中可以实现连接数据库,实现数据的增删改查⼀、后台数据绑定: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;。
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 服务器控件在网页上编辑和插入数据通过使用封装数据访问的数据源控件与以可编辑格式显示记录的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中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控件增删改操作详解(一)所谓三层架构(3-tier application)就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
区分层次的目的即为了“高内聚、低耦合”的思想。
1、表现层(UI):主要是指与用户交互的界面,用于显示数据和接受用户输入的数据,将用户输入的数据传递给业务逻辑层,一般不包含任何实际的业务处理,当业务逻辑层的数据发生变化时,表示层就会显示出更新的结果。
表示层提供应用程序的用户界面,通常为Windows 应用程序或Web应用程序。
2、业务逻辑层(BLL):是表示层和数据访问层之间的桥梁,它代表应用程序的核心功能,负责处理数据层的数据,实现业务逻辑。
业务逻辑层通常为类库。
3、数据访问层(DAL):主要实现对数据的保存和读取操作,将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库中。
数据访问层可以访问关系数据库、文本文件或者XML文档,通常为类库。
三层架构对应的图如下图所示:为了更好地让初学者轻松入门,这里仍然采用趣味性的方式聊一些常用技术点,致力于.NET 新手们的快速提高!知识都是普通的,关键是学习的思路。
技术源于生活,技术原来可以这样学。
抛砖引玉而已。
层次结构在现实社会里随处可见。
记得有个笑话讲有个村长得意地向他老婆吹牛:“全中国只有四个人比我官大,乡长、县长、省长和国务院总理”。
这个笑话也体现了真实社会中分层的现象。
社会人群会分层,公司人员结构也会分层,楼房是分层的,甚至做包子的笼屉都是分层的。
虽然分层的目的各有不同,但都是为解决某一问题而产生的。
所以,分层架构其实是为了解决某一问题而产生的一种解决方案。
1、常用的三层架构设计软件系统最常用的一般会讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等,有的还要细一些,通过分解业务细节,将不同的功能代码分散开来,更利于系统的设计和开发,同时为可能的变更提供了更小的单元,十分有利于系统的维护和扩展。