- 浏览: 492575 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (329)
- [发布至博客园首页] (12)
- [随笔分类][01] .Net X (59)
- [随笔分类][20] Architecture (16)
- [随笔分类][21] Developer Logs (13)
- [网站分类]Windows 7 (1)
- [随笔分类][13] Oracle & .Net (7)
- [随笔分类][16] Love in China (14)
- [随笔分类][15] Development Tools (20)
- [随笔分类][18] Windows Phone (12)
- [随笔分类][12] Design & Pattern (17)
- [网站分类].NET新手区 (22)
- [网站分类]首页候选区 (2)
- [随笔分类][08] Windows (Server) (13)
- [随笔分类][02] CSLA.Net (3)
- [随笔分类][10] jQuery & javaScript (10)
- [随笔分类][11] SQL Server (4)
- [随笔分类][22] Enterprise Logs (3)
- [随笔分类][03] News (9)
- [随笔分类][19] Quality Assurance (2)
- [随笔分类][05] Silverlight (20)
- [随笔分类][14] Google Earth & .Net (6)
- [网站分类]非技术区 (9)
- [随笔分类][07] WWF (2)
- [随笔分类][04] SharePoint (1)
- [随笔分类][20] Analysis & Design (36)
- [随笔分类][06] WCF (5)
- [随笔分类][12] Architecture (1)
- [随笔分类][09] WPF (0)
- [随笔分类][17] VStudio & Expression (5)
最新评论
-
zhangyy130:
你好,我关于第二段的那个表视图、模型与图这三者的关系我没有看明 ...
UML模型的组成 -
guji528:
谢谢分享!
Enterprise Architect 基础应用 -
studentsky:
好文章,图文并茂!
WCF 第一个用 Visual Studio 2010 创建的WCF服务 -
chen975311486:
用哪个工具画的????
UML中对关系的描述 (二) -
frankies:
继续学习中。。
UML 交互概述图
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="RolesEdit.aspx.cs" Inherits="PTWeb.RolesEdit" Title="项目职务" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> <div> <%-- 多视图控件 --%> <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0"> <%-- 视图1 用于显示 --%> <asp:View ID="MainView" runat="server"> <%-- 视图中的内容 AutoGenerateColumns="False" 代表无需自动刷新内容 DataKeyNames="Id",代表数据主键名字,设置此值,可以获取每一行的这个值 DataSourceID="RolesDataSource" 数据源 --%> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="RolesDataSource" DataKeyNames="Id"> <Columns> <%-- ReadOnly="True" 即使在编辑状态下也不能修改 SortExpression="Name" 排序字段 --%> <asp:BoundField DataField="Id" HeaderText="编号" ReadOnly="True" SortExpression="Id" /> <asp:BoundField DataField="Name" HeaderText="职务" SortExpression="Name" /> <%-- 启用删除按钮和编辑按钮 --%> <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> </Columns> </asp:GridView> <asp:LinkButton ID="AddRoleButton" runat="server" OnClick="AddRoleButton_Click">添加职务</asp:LinkButton><br /> </asp:View> <%-- 视图2 用户插入新数据 --%> <asp:View ID="InsertView" runat="server"> <%-- OnItemInserted="DetailsView1_ItemInserted" 插入新值后调用 OnModeChanged="DetailsView1_ModeChanged" 模式更改调用 AutoGenerateRows="False" 无需自动刷新 DataSourceID="RolesDataSource" 数据源 --%> <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="RolesDataSource" DefaultMode="Insert" Height="50px" Width="125px" DataKeyNames="Id" OnItemInserted="DetailsView1_ItemInserted" OnModeChanged="DetailsView1_ModeChanged"> <Fields> <asp:BoundField DataField="Id" HeaderText="编号" SortExpression="Id" /> <asp:BoundField DataField="Name" HeaderText="职务" SortExpression="Name" /> <%-- 显示插入按钮 --%> <asp:CommandField ShowInsertButton="True" /> </Fields> </asp:DetailsView> </asp:View> </asp:MultiView> <%-- 错误反馈标签,红色的 --%> <asp:Label ID="ErrorLabel" runat="server" ForeColor="Red"></asp:Label><br /> <%--自定数据源控件(539) TypeName="ProjectTracker.Library.Admin.Roles, ProjectTracker.Library" 控件关联的业务类 逗号 业务类所在的程序集 --%> <csla:CslaDataSource ID="RolesDataSource" runat="server" TypeName="ProjectTracker.Library.Admin.Roles, ProjectTracker.Library" OnDeleteObject="RolesDataSource_DeleteObject" OnInsertObject="RolesDataSource_InsertObject" OnSelectObject="RolesDataSource_SelectObject" OnUpdateObject="RolesDataSource_UpdateObject" TypeSupportsPaging="False" TypeSupportsSorting="False"> </csla:CslaDataSource> </div> </asp:Content>
//====================================================================== // // Copyright (C) All Rights Reserved // Guid1: ac0ac771-edca-45ec-a03c-8e780c6168ba // CLR版本: 2.0.50727.3053 // 新建项输入的名称: RolesEdit // 机器名称: SOFTWARE-FRT-08 // 命名空间名称: PTWeb // 文件名: RolesEdit // 当前系统时间: 2008-10-2 19:08:56 // 当前登录用户名: frt // 创建年份: 2008 // // Created by Terry.Feng.C (冯瑞涛) at 2008-10-2 19:08:56 // // //====================================================================== 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; namespace PTWeb { /// <summary> /// 这个程序中的代码都非常的简单,几乎很少超过200行,所以可以轻松的阅读 /// </summary> public partial class RolesEdit : System.Web.UI.Page { #region 私有成员 //枚举(539),直接使用数字会使代码难以维护和观看,定义枚举非常好, //比喻,可以想像如果你以后需要修改代码将MainView和InsertView这两个页面的代表调换,那么我们只需要在枚举中将0和1换个位置,尔代码无需做任何修改 private enum Views { MainView = 0, InsertView = 1 } /// <summary> /// (540) 缓存业务数据资源 /// </summary> /// <returns></returns> private ProjectTracker.Library.Admin.Roles GetRoles() { //读取指定Session内容 object businessObject = Session["currentObject"]; //判断获取内容,如果是空或者与所需的类型不符合,则重新取出数据集合 if (businessObject == null || !(businessObject is ProjectTracker.Library.Admin.Roles)) { //从数据库取出数据资源 businessObject = ProjectTracker.Library.Admin.Roles.GetRoles(); //缓存数据资源 Session["currentObject"] = businessObject; } //将数据资源返回 return (ProjectTracker.Library.Admin.Roles)businessObject; } /// <summary> /// 应用验证规则初始化页面 /// </summary> private void ApplyAuthorizationRules() { //根据当前用户CanEditObject的状态同步显示GridView的最后一列 this.GridView1.Columns[this.GridView1.Columns.Count - 1].Visible = ProjectTracker.Library.Admin.Roles.CanEditObject(); //同上面的道理一样,因为此系统没有真正意义上的权限系统所以这些权限的最终判断是写死的,在这里他们是Administrator this.AddRoleButton.Visible = ProjectTracker.Library.Admin.Roles.CanAddObject(); } #endregion #region 窗体事件 /// <summary> /// Load事件的使用多在对程序页面的初始设置上,其中的代码基本上全是围绕初始化展开的 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Page_Load(object sender, EventArgs e) { //如果不是回调,一般只第一次进入 if (!IsPostBack) { //清空内容对象(540) Session["currentObject"] = null; //这个方法的调用是初始化根据权限去初始化页面(547) ApplyAuthorizationRules(); } else this.ErrorLabel.Text = ""; } /// <summary> /// (542)加职务按钮 /// </summary> /// <param name="sender">被监控的对象</param> /// <param name="e">事件处理中所感兴趣的东西</param> protected void AddRoleButton_Click(object sender, EventArgs e) { //设置模式为插入模式 this.DetailsView1.DefaultMode = DetailsViewMode.Insert; //激活显示DetailsView的那个View,当然只显示这个视图,刚才的那个视图被隐藏 MultiView1.ActiveViewIndex = (int)Views.InsertView; } /// <summary> /// 当插入后激发 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void DetailsView1_ItemInserted( object sender, DetailsViewInsertedEventArgs e) { //点击插入后,View模式还原 MultiView1.ActiveViewIndex = (int)Views.MainView; //(545)表格重新绑定以刷新表格内容,DataBind的调用会使GridView刷新内容,之后导致RolesDataSource的SelectObject被触发 this.GridView1.DataBind(); } /// <summary> /// 在插入或者是更新等操作的时候,都有可能会点击取消操作,取消会导致模式的改变,由此引发此事件去改变显示模式,回复列表显示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void DetailsView1_ModeChanged( object sender, EventArgs e) { //模式一点更改,索命已经点击了插入按钮,将View视图还原 MultiView1.ActiveViewIndex = (int)Views.MainView; } #endregion #region 数据控制 /// <summary> /// 删除,同理点击删除按钮激发这个事件(547) /// </summary> /// <param name="sender">一般这个对象指被监视对象,是事件的发送者,一直被监视的目标。这个对象包含着其他对象所感兴趣的内容,当这个感兴趣的内容到达某种状态就会发送消息,这个消息就是事件, /// 比如被点击了,或者修改了,去提示监控者去调用某些处理程序,这个程序就是下面的方法。</param> /// <param name="e">这个对象包含这监控者所感兴趣的数据,这个会根据不同的事件尔改变(因为不同的事件都是具有不同的委托签名的),在这里指的是删除的是那条记录啊</param> protected void RolesDataSource_DeleteObject(object sender, Csla.Web.DeleteObjectArgs e) { try { ProjectTracker.Library.Admin.Roles obj = GetRoles(); //获取被删除记录的那条记录的键值, int id = (int)e.Keys["Id"]; //调用业务类方法设置为删除标记 obj.Remove(id); //调用Save真正删除 Session["currentObject"] = obj.Save(); e.RowsAffected = 1; } catch (Csla.DataPortalException ex) { this.ErrorLabel.Text = ex.BusinessException.Message; e.RowsAffected = 0; } catch (Exception ex) { this.ErrorLabel.Text = ex.Message; e.RowsAffected = 0; } } /// <summary> /// (543)当用户通过DetailsView输入新的Role,在控件上点击插入连接,RolesDataSource会触发这个事件,将新角色添加到集合当中 /// /// </summary> ///<param name="sender">一般这个对象指被监视对象,是事件的发送者,一直被监视的目标。这个对象包含着其他对象所感兴趣的内容,当这个感兴趣的内容到达某种状态就会发送消息,这个消息就是事件, /// 比如被点击了,或者修改了,去提示监控者去调用某些处理程序,这个程序就是下面的方法。</param> /// <param name="e">这个对象包含这监控者所感兴趣的数据,这个会根据不同的事件尔改变(因为不同的事件都是具有不同的委托签名的),在这里指的是插入的是那条记录啊</param> protected void RolesDataSource_InsertObject( object sender, Csla.Web.InsertObjectArgs e) { try { //(544)获取列表对象 ProjectTracker.Library.Admin.Roles obj = GetRoles(); //调用AddNew方法,最终他会调用我们重载的AddNewCore方法,请看Roes.cs,新建一个 ProjectTracker.Library.Admin.Role role = obj.AddNew(); //(544)拷贝Values中的属性值,到Role这个对象中,当然你也可以使用,原始的Role.Name=e.Values["Name"].ToString;是一样的 Csla.Data.DataMapper.Map(e.Values, role); //调用Save保存,并将被更新的结果集返回,当然你也可以,将这个操作留给一个按钮事件 //当时请注意这个将新的结果集付给Session的动作是非常有学问的,她会在之后的显示刷新时候直接被用到,如果不付给这个缓存,那么新的结果将无法及时反映 Session["currentObject"] = obj.Save(); //受到影响 e.RowsAffected = 1; } catch (Csla.DataPortalException ex) { this.ErrorLabel.Text = ex.BusinessException.Message; e.RowsAffected = 0; } catch (Exception ex) { this.ErrorLabel.Text = ex.Message; e.RowsAffected = 0; } } /// <summary> /// 选择 /// </summary> /// <param name="sender">一般这个对象指被监视对象,是事件的发送者,一直被监视的目标。这个对象包含着其他对象所感兴趣的内容,当这个感兴趣的内容到达某种状态就会发送消息,这个消息就是事件, /// 比如被点击了,或者修改了,去提示监控者去调用某些处理程序,这个程序就是下面的方法。</param> /// <param name="e">这个对象包含这监控者所感兴趣的数据,这个会根据不同的事件尔改变(因为不同的事件都是具有不同的委托签名的),在这里指的是选择的是那条记录啊</param> protected void RolesDataSource_SelectObject( object sender, Csla.Web.SelectObjectArgs e) { //获取数据资源 ProjectTracker.Library.Admin.Roles obj = GetRoles(); //将资源,绑定 e.BusinessObject = obj; } /// <summary> /// 更新,点击绑定的控件的更新按钮会激发数据源此事件, /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void RolesDataSource_UpdateObject( object sender, Csla.Web.UpdateObjectArgs e) { ProjectTracker.Library.Admin.Roles obj = GetRoles(); try { //转换字符串到整型,作为参数,调用业务方法获取一个职务对象引用 //e.Keys可以获得当前控件的中DataKeyNames域中的值 ProjectTracker.Library.Admin.Role role = obj.GetRoleById(int.Parse(e.Keys["Id"].ToString())); //将更改对象中名字字段的值付给Name属性,这里没有使用上面的Map功能,因为只有一列 role.Name = e.Values["Name"].ToString(); //调用保存方法 Session["currentObject"] = obj.Save(); //受影响 e.RowsAffected = 1; } catch (Csla.DataPortalException ex) { this.ErrorLabel.Text = ex.BusinessException.Message; e.RowsAffected = 0; } catch (Exception ex) { this.ErrorLabel.Text = ex.Message; e.RowsAffected = 0; } } #endregion } }
发表评论
-
LINQ to SQL语句之Insert/Update/Delete操作
2009-12-30 14:54 1111Insert/Update/Delete操作 插入(Ins ... -
RabbitMQ 安装配置和简单实例
2010-01-21 16:52 1827安装ErLang运行环境 配置运行环境变量 启动服务 ... -
MSMQ(Microsoft Message Queue,微软消息队列) Asp.Net 简单示例
2010-01-22 14:59 3254系统: Windows XP 1.安装MSMQ 控制面板—&g ... -
IromPython .Net 的简介和第一个例子
2010-01-23 18:53 1343.Net 4 都已经到来 ... -
Microsoft Asp.Net MVC 从入门到精通
2010-01-27 17:53 836ASP.NET MVC Framework是微软官方提供的MV ... -
C# Socket 同步通信与异步通信 示例
2010-01-30 17:50 4735同步 1.建立链接发送和获取信息 异步 1.服务器端建立一 ... -
解决 Visual Stuido 工具栏中的工具重置后,恢复回来。
2009-12-18 17:06 1247拿DevExpress 控件为例,如果重置工具栏后,以前的工具 ... -
LINQ to SQL 用O/R设计器手工建表对象
2009-10-11 22:04 1019除了自己建立定制对象外,还可以使用O/R设计器以可视化的方式创 ... -
LINQ to XML .Net 3.5 中的新XML对象
2009-10-15 14:11 887System.Xml.Linq 命名空间中,有一系列新的LIN ... -
LINQ to XML 用 LINQ 查询 XML
2009-10-15 15:57 671将一个已知的XML放到XDocument 对象当中使用LINQ ... -
LINQ to XML 操作XML文档
2009-10-15 17:18 975使用 XDocument 对象的 Element 方法,获取制 ... -
C# 编码规范
2009-10-15 19:20 724陈年的文档,不过很不错整理出来发到博客上,还有更多的朋友需要。 ... -
Visual Studio 项目模板、文件模板、代码段和环境设置
2009-10-15 19:31 940很久前使用过,那个时候还没有开始写博客,好久不用就都忘记了,这 ... -
ADO.NET Entity Framework 概述
2009-10-16 11:50 565ADO.NET Entity Framework 与 LINQ ... -
LinqPad 1.31 下载
2009-01-14 15:42 968LinqPad 1.31 也许你已经非常熟悉他了,为即将使用L ... -
jQuery 的第一个例子
2009-01-18 10:34 792通过这个例子可以对jQuery的使用有个基本的认识,jQ ... -
jQuery 选择器的使用
2009-01-18 10:39 833jQuery 能如此的流行,很重要的一点也许就是他有非常强大且 ... -
一次从GridView 获得多个指定行中多个指定控件的值
2009-01-20 07:33 870一次从GridView 获得多个指定行中多个指定控件的值,非常 ... -
jQuery 的Ajax应用(1)--学习篇,内附实例
2009-01-28 21:48 1327下面以前台jQuery,后天C# 的方式,演示了,如何通过 ... -
Enterprise Library 4.1 一步一步从入门到精通(未完成)
2009-02-05 23:04 888Enterprise Library 4.1 一步一步从入门到 ...
相关推荐
C#企业应用开发艺术CSLA.NET框架开发实战.part1.rar(PDF加源码)
C#企业应用开发艺术CSLA.NET框架开发实战.part2.rar
[CSLA.NET] Using CSLA 4 eBook Series ☆ 图书概要:☆ The Using CSLA 4 ebook series will teach you how to use CSLA 4 to create powerful object-oriented business layers for your applications, as well ...
《#企业应用开发艺术CSLA.NET框架开发实战》(Expert C#2008 Business Objects)配套源码及例程csla-4.5.700。 CSLA .NET is a software development framework that helps you build a reusable, maintainable ...
CSLA.NET是一个在分布式环境下只通过修改配置文件就可以实现N层部署的框架. 它致力于构建丰富,强大而灵活的业务层,包含了验证,权限,数据门户等标准化的解决方案,使你的业务对象更加标准和灵活.它提出了移动对象...
[Apress] CSLA .NET 框架企业应用开发艺术 (2008 版本) (英文版) [Apress] Expert C# 2008 Business Objects (E-Book) ☆ 图书概要:☆ In Rockford Lhotka’s Expert C# 2008 Business Objects, you’ll learn ...
此为《C#企业应用开发艺术--CSLA.NET框架开发实战》一书的源码 作 者: Rockford Lhotka 译 者: 侯伯薇 出版日期: 2010-03 .NET应用架构开发经典 揭示CSLA.NET框架的设计权衡 从实践中精通面向对象技术 ...
Visual Studio CSLA Extension for ADO.NET Entity Framework. Visual Studio extension and T4 templates for generation of CSLA objects from ADO.NET Entity Framework model. CSLA.NET框架面向实体框架的代码...
CSLA 4 ebook series -- Using CSLA 4 CSLA .NET Overview
csla.net最新的源码版本
CSLA.NET框架源码和实例,包括ProjectTracker等。
C#企业应用开发艺术CSLA.NET框架开发实战.rar,包括本书源码
His industry-standard VB .NET Business Objects book not only addresses changes in .NET 2.0 and Visual Studio 2005, but also reflects substantial enhancements and improvements to the CSLA .NET ...
一个最完整的基于Csla.net的vb源代码,由comexpress生成,学习CSLA 的好资料。
C#企业应用开发艺术CSLA.NET框架开发实战
C#企业应用开发艺术CSLA.NET框架 4.5,带源码和实例
☆☆ 资源说明:☆☆ CSLA .NET 4.3.14 (C#) 框架版本: .NET Framework 4 Silverlight 5 Silverlight 4 Windows Phone 7.5 Mono MonoDroid
☆ 版本如下:☆ 1.53 2.0 2.0.1 2.0.2 2.0.3 2.1 2.1.1 2.1.2 2.1.3 2.1.4 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.7.0
框架的各个功能基本都实现 是作者写的一个小例子 一直贯穿着整个书的 是3.8.4版本
Expert C# Business Objects图书的源码,基于.net4.0。