摘要: 这里为了演示上简单,假设:后台数据库(暂为SqlServer只有用户表User与部门表Department),各表字段相应精简:User(用户表)Id主键Name姓名DeptId部门编号其余字段省略......Department(部门表)Id主键Name名称Desc部门描述其余字段省略......后台数据库:testdb的情况建立相关的存储过程:一般我个人也喜欢ORM转换成实体对象(见截图)(注意:这里增加了DeptTitle属性<部门名称>)现在就是访问数据库SqlServer类型,封装到SqlserverProvider中。如果将来访问Access数据库,对应访问封装到Acc 阅读全文
posted @ 2012-01-10 14:42 net小虫 阅读(3911) 评论(10) 推荐(4) 编辑
摘要: 有时候,开发一个桌面程序,经常会出现很多窗体,而一个窗体比如说设置窗体生效后,对应的其他窗体要能够同步反映最新的变化。利用委托与事件机制是一种非常好的方式。但是这里介绍的却是通过消息机制来实现。本人对这方面了解的不够深入,但是能做些简单的应用。先来看看例子:点击Form2与Form3按钮,分别show()方式出对应窗口,窗口中有发送按钮实现发送消息给Form1。 点击发送消息按钮:明白两件事情,就知道如何应用了。首先理解:protected override void WndProc(ref Message m)怎么说了:你在该控件(窗口)中做的所有事情其实都变成了消息m,然后这个m被发配到了 阅读全文
posted @ 2012-03-11 17:53 net小虫 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 1.命名参数和可选参数您可以创建自己的支持命名参数和可选参数的调用。 请看以下示例:public void M(int x, int y = 5, int z = 7) { }在此方法中,为参数 y 和 z 分配了默认值。 对此方法的调用如下所示:M(1, 2, 3); // M 的普通调用 M(1, 2); // 省略 z,等效于 M(1, 2, 7) M(1); // 同时省略 y 和 z,等效于 M(1, 5, 7) M(1, z: 3); // 通过名称传递 z M(x: 1, z: 3); // 通过名称同时传递 x 和 z M(z: 3, x: 1); // 反转实参的顺序2.Of 阅读全文
posted @ 2012-02-07 11:20 net小虫 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 后台线程或二级线程可以用于执行长时间运行的任务,不阻碍主UI任务。所需的类位于mscorlib.dll程序集的System.Threading名称空间下。注意创建的Thread对象的Priority属性(优先权)。通常情况下该属性设置为BelowNormal,使后台线程不会在任何程度上影响到主线程的速度。我们希望能指定i的起始值,但是线程委托ts传递的方法Method1只能是无参数无返回类型的方法。如何解决呢?我们可以创建一个带有多个属性的类,主线程创建该类的一个实例。再来看看主线程如何调用的?(实例化对象通过构造方法传参)虽然解决了问题,但是使用起来麻烦,因为需要自己定义一个类,以及该类的. 阅读全文
posted @ 2012-01-29 12:01 net小虫 阅读(1767) 评论(1) 推荐(6) 编辑
摘要: 承接上一篇,这里用来实现PollBox.ascx用户控件和页面ArchivedPolls.aspx。先来看:Admin/ManagePolls.aspx(以后授权administrators角色的用户访问)。下面来实现:PollBox.ascx用户控件,它的功能如下1.如果检测到用户还未对民意调查进行投票,该控件将显示一列单选按钮及民意调查所包含的答案选项,以及一个投票按钮2.如果检测到用户已经投票过,那么控件将显示投票结果。显示每个选项的票数百分比,既显示数字,还显示一个彩色的条形图。 在显示已存档的民意调查时也将显示这些内容。页面可以根据需要显示多个民意调查的显示:如:用户控件PollBo 阅读全文
posted @ 2012-01-28 15:23 net小虫 阅读(1969) 评论(3) 推荐(2) 编辑
摘要: 首先来看Admin文件夹下的ManagePolls.aspx页面:设计视图:这个界面布局非常类似UI(Web版),这里不再详述。只不过,把其中遇到的问题做个小小归纳,或许你也会碰到类似的问题。这个是DAL层的具体数据提供程序SqlPollsProvider,我们要注意的是下滑红线,由于方法跟具体的存储过程对应,其方法参数对应了存储过程的参数名。这里并没有什么问题。(其中GetPolls方法的两个参数对应存储过程的两个bit参数)但是编码到BLL层的时候,我们曾经统一了业务域对象的主键名为Id。并且还把重复的尤其是可能关于审计追踪方面的属性提取到父类BasePoll.cs中。界面中GridVie 阅读全文
posted @ 2012-01-27 10:58 net小虫 阅读(1359) 评论(2) 推荐(2) 编辑
摘要: 承接上一篇BLL层代码实现继续,我们接着实现缓存的功能。为了减少数据库的交互,我们希望已经查询得到的数据下次需求再显示时,能直接从缓存取出显示,而减少再一次的从数据库获取的过程,从而更好更快地显示到UI,同时也降低了后台数据库系统的负载。这就需要通过缓存实现。经常听到的一句话更好的概括了这点。(以空间换时间)。缓存仅仅是针对查询的数据,如果查询的内容没有变动,用缓存是最佳的。但是,后台的数据一旦真正改动(如增/删/改)如果显示缓存数据,就会存在数据过期的问题。 以往的做法就是对访问频率高的数据进行缓存,并设置一个合理的缓存有效时间,过了这段时间,缓存的数据将失效,重新从后台获取并进入下一拨的. 阅读全文
posted @ 2012-01-26 09:47 net小虫 阅读(1693) 评论(1) 推荐(1) 编辑
摘要: 接着数据访问层的再次重构,我们实现对应的BLL层编码,其实关于这部分的内容,可以参考BLL层编码实现,这里仅仅简单通过代码而演示。构建民意调查模块的业务域对象(Poll和PollOption)。上图的代码实际上只需从简单实体类PollDetail和PollOptionDetail类中复制过来,改一下类名称即可。从这里可以看到至少业务域对象已经涵盖了简单实体对象的所有。但是还需要增加简单实体对象没有的方法和关联父子对象引用的属性。我们接着继续完善业务域对象。值得一提的是:就上图而言,我们发现属性Id/AddedBy/AddedDate是共有的,Id是主键,Addedby(记录添加者),Adde. 阅读全文
posted @ 2012-01-22 12:23 net小虫 阅读(1755) 评论(2) 推荐(2) 编辑
摘要: 接着数据访问层DAL的再次重构_2_模块的自定义设置节我们继续实现,到这里,开始后台编码,经历了建立数据库、建表、存储过程、web.config的自定义配置节点后,我们来实现数据访问层的编码。首先:用OOP方式来映射后台的表Polls和PollOptions。分别命名为PollDetail和PollOptionDetail简单实体类。注意一些转换映射的事项:简单实体就是对表的列进行封装。映射为对应的属性时注意赋予初始值。 (如日期字段的复制根据需要选择 DateTime.Now 和 DateTime.MinValue、DateTime.MaxValue)构造方法需要重载(添加带参数的构造方法, 阅读全文
posted @ 2012-01-21 17:33 net小虫 阅读(2173) 评论(0) 推荐(1) 编辑
摘要: 接着数据访问层DAL的再次重构_1_建库表存储过程,数据库的连接串随着将来移植的问题而变化,所以在web.config中我们使用<connectionStrings>节点来保存该设置,为了以后便于维护这方面。上一篇已经说明了(观察aspnetdb.mdf得到的启发),对于网站而言,提升网站的性能那么缓存将是非常重要的功能。数据缓存自然是不可或缺的。三层体系中的层次很明白了。我们希望DAL层能够支持缓存、设置缓存有效时间(以秒为单位)、以及对数据库连接串的正确访问。那么这些设置我们使用web.config的自定义配置节点来设置。(可能有人会提议用web.config的<appS 阅读全文
posted @ 2012-01-21 11:49 net小虫 阅读(1492) 评论(1) 推荐(2) 编辑
摘要: 以前已经写过DAL层编码实现(仅仅为了演示),当时介绍的表Depts和Users很简单,这次实现网站的民意调查模块功能,第一表按照真实项目运作(存储过程实际实现过程),二来DAL的代码继续重构完善,并配合web.config自定义配置节和用户成员配置综合起来,BLL层编码实现没有什么变化,UI层Web版实现主题和模板页,民意调查的投票结果用用户控件封装。总之,该模块演示了完整的流程,综合前面博客的文章所有内容。算是一次整体大演练,希望能讲述的清楚。如果涉及的知识点在以前随笔中有了,这里会简单说明,而不再详细展开。(演练过程中的错误会截图说明,总之确保大家也能一道循序渐进的参与。) 民意调查模. 阅读全文
posted @ 2012-01-20 21:46 net小虫 阅读(2117) 评论(2) 推荐(1) 编辑
摘要: 接下来实现数据分页的效果,界面UI控件的页面请参考UI层实现web版。EnablePaging:指示Select方法是否支持分页。SelectCountMethod:需要总行数时执行的方法。StartRowIndexParameterName:当EnablePaging为true时,此属性表示Select方法的参数,该参数接受要检索的第一行的索引的值。MaxinumRowsParameterName:当EnablePaging为true时,这表示Select方法的参数,该参数接受检索的行数的值。怎么使用呢?1:首先设置EnablePaging=true,运行页面看看什么情况?2:重载GetDe 阅读全文
posted @ 2012-01-17 13:33 net小虫 阅读(1329) 评论(2) 推荐(2) 编辑
摘要: 不多说,还是直接看最终的效果:(没有选中记录的初始效果)选中的效果:切换数据库的效果:对应的设计视图:(Default.aspx主要就是:GridView控件+DetailsView控件+ObjectDataSource控件)实现了部门和用户的管理(增/删/改),而后置代码(default.aspx.cs只有七行代码,就实现了!)可以说,三层的开发尤其是BLL业务域对象的封装,使得UI的开发变得简易多了,由于WebUI控件的数据绑定和相互良好的关联,比起UI桌面版开发更显简单。文章的后面再讲解数据分页的实现功能。最后一个<切换数据库ImageButton> 也是仅仅为了演示方便,实 阅读全文
posted @ 2012-01-16 17:55 net小虫 阅读(2775) 评论(6) 推荐(4) 编辑
摘要: 来到UI层编写了,由于三层的架构体系,所以UI层只需要和BLL层沟通就好。(BLL层和DAL层交互,DAL层与底层数据库交互),关于DAL层的编码和BLL层编码实现过程,请参考前面的文章。先来看看最终效果:(这里只能抛砖引玉,小虫我在界面美观上没有仔细用功,这一点大家千万不能也如此不重视,好的编程人员在UI上也要起码的让客户看上去舒服,这一点我做得很不够。所以后面的界面效果望大家能见谅!)数据库已经切换了(目前只有Access数据库和SqlServer数据库)实际上就是实现了用户的增删改和按部门查询的功能,加上了一个鸡肋(数据库切换)(对app.config的配置更新还是有了解的必要)。< 阅读全文
posted @ 2012-01-14 13:53 net小虫 阅读(3376) 评论(8) 推荐(6) 编辑
摘要: 业务类使用DAL类提供对数据的访问,并加强验证规则,约束检查,并且提供数据的面向对象的表达方式和用于处理数据的方法。这样,BLL作为了一个映射层,它使得底层关系数据库中的数据在用户界面的代码中以对象的方式出现。承接上文:DAL层代码实现先来回顾:DAL中的实体类对象:User类和Department类 DAL中的实体类: 它们只是将从数据库中取得的数据象征性地进行封装,与数据库的表(或者视图)是一一对应的关系,没有对数据进行插入、更新、删除和检索的方法。建立BLL文件夹,里面存放的是业务域对象。下图是域对象DepartmentObj的类图。这种类要复杂些,不但要封装数据,还要有对其父对象或子. 阅读全文
posted @ 2012-01-11 13:01 net小虫 阅读(2725) 评论(0) 推荐(1) 编辑
摘要: 以后博客写模式相关内容,多少是有些东施效颦的,因为这方面的资料实在有很多牛人写的太好了。不过,我还是决定写写自己的理解。首先,在这里,做个广告,强烈推荐:《大话设计模式》看过之后,幽默趣味性强,通俗易懂,学起来事半功倍。如果没看过,很值得一看。初学的话,先看附录A。以后谈及模式,会常引用该书内容。 阅读全文
posted @ 2012-01-08 12:52 net小虫 阅读(511) 评论(2) 推荐(0) 编辑
摘要: 需要在页面上使用文本在线编辑器,找到了kindeditor这款,不多说,按照提供的示例使用。先来看对应的aspx页面对应的部分,代码截图如下:用的DetailsView控件,采用了母版页。先引入脚本文件:<script src="../kindeditor/kindeditor-min.js" type="text/javascript"></script><script type="text/javascript"> KE.show({id:'txtBody'}); </sc 阅读全文
posted @ 2012-01-08 10:47 net小虫 阅读(1405) 评论(0) 推荐(0) 编辑
摘要: 承继上一篇博客:现在添加Controls.skin文件(可以把所有的服务器控件的样式放在此文件中)注意:用于SiteMapPath控件的skin就无法轻松地用CSS样式来代替了,该控件映射了不止一个HTML元素。创建一个实例Default.aspx页面选择Template.master模板页面,在中间的ContentPlaceHolder中放入一些内容:注意:@Page指令添加Theme属性为TemplateMaster,并且masterPageFile指定Template.master。也可以在web.config中操作一次从而实现能对所有页面实现上述效果,如下设置:<?xml ver 阅读全文
posted @ 2012-01-02 19:28 net小虫 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 建立站点地图:web.sitemap创建模板页面:Template.master下面的代码为Template.master文件定义了标准的HTML元标记和页头。页头:放一些DIV容器,一个用于菜单链接,一个用于登录框,另一个用于选择主题(一个包含了可选主题的下拉框)。这些DIV使用绝对位置,所以可以直接把它们放在想要的位置上。为了同步看到样式效果,创建第一个主题:TmeplateMonster。该主题下创建Default.css。(当前主题文件夹中所有的CSS文件在运行时自动被.aspx页面链接。),该主题的样式需要的图片都存放在images文件夹中。在default.css编写样式:可见:背 阅读全文
posted @ 2012-01-02 19:03 net小虫 阅读(481) 评论(0) 推荐(0) 编辑
摘要: 管理部分的页面放在文件夹admin中,为保证不被非法访问,在该目录下添加一个web.config文件,其代码如下:View Code 1 <?xml version="1.0"?>2 <configuration>3 <system.web>4 <authorization>5 <allow roles="Administrators"/>6 <deny users="*"/>7 </authorization>8 </system.web> 阅读全文
posted @ 2011-12-28 20:36 net小虫 阅读(666) 评论(1) 推荐(1) 编辑