ASP.NET开发,且编且改,分清职责
本篇Insus.NET使用一个实例,分享在ASP.NET开发时,一个功能一个方法(函数),且编且改,一步一个脚印把实例完成。在方法多变多形式的情况之下,怎样把写出来程序简单明了。
下面是一个Excel文档:
http://download.cnblogs.com/insus/ASPDOTNET/Book1.rar
现在是要读取它,并显示于GridView控件上,方法参考《Excel上传并读取数据》http://www.cnblogs.com/insus/p/3814857.html 由于一些字段在本篇中,无用,因此删除之。
"SELECT [性别],[所属部门],[职务],[在职否] FROM [Sheet1$]"
我们在xxx.aspx 的html markup中。拉一个GridView控件,并使用自定义模版:
读取Excel演示:
现在要求来了,用户需要读取与加载Excel至GridView之后,希望能编辑数据。但不想按照传统方式一样,一行一行点击编辑铵钮之后,才能进入编辑状态,而一开始就是能编辑。怎样实现编辑,四个字段,前后字段“性别”与“在职否”,只有两个值。“男”与“女”; “在职”与“离职” 可以使用RadioButtonList控件。而中间两个字段中“所属部门”与“职位”,多值呈现,可以使用DropDownList控件:
既然有控件,我们需要拿数据源来给这些控件数据绑定。由于这些控件均是在GridView控件内的,绑定在OnRowDataBound事件中进行。

四个嵌套在GridView控件内的控件数据绑定:
上面代码示例中,Insus.NET只做两个控件的示意,一个DropDownList和一个RadioButtonList。它们的数据源有来自数据库,有来自函数。你需要指定显示的数据(DataTextFeid),哪一个用作后端获取的数据(DataValueField)。这需要根据你开发时的需求了。
写到这里,你发现四个控件在绑定数据源时,有代码冗余:
ccc.DataSource = xxx;
ccc.DataTextField = yyy;
ccc.DataValueField = zzz;
ccc.DataBind();
我们可以重构为一个方法,在重构之前,我们会遇上二个问题要考虑的,一个是控件不同。RadioButtonList和DropDownList;二是被绑定的数据源不同,一些为泛型,DataTable等。处理好这些,需要想出一个万全之策。如:

看到两个红箭头否,由于RadioButtonList和DropDownList控件,均是继承了ListControl控件。数据源不管是什么,均宣告为object即可。然后上面的四个控件的绑定,就可以使用这个方法了:
如果把注释掉的代码拿掉,是不是简洁多了?看看运行时浏览的效果:

现在看到一个问题,中间两个DropDownList下拉列表,没有“--选择--”选项。怎样加入第一个项呢?哦,这个简单:
添加上面两行高亮代码,得到地效果如下:

到现在为止,我们只是对控件进行数据源绑定。回头来看看下载的Excel数据:
正确来说,应该是把数据原始状态一起绑定,OK,解决此问题,再写程序:
把每笔记录与控件绑定的数据时行匹配,匹配的,改变状态。
浏览看看结果:

嗯,越来越接近理想的要求了。开发就是这样,一个功能,一个方法或是一个函数,分清职责。
呵呵明眼人,又会看到上面的代码有冗余了:
foreach (ListItem li in ccc.Items)
li.Selected = li.Text == drv["xxx"].ToString() ? true : false;
Insus.NET在开发过程中,一旦发现有代码冗余,必需重构之,不然看上去就不舒服。创建一个方法吧:
有关这个方法,你还可以参考另外一篇《没有什么,开发ASP.NET时随便写写,想到什么写什么》http://www.cnblogs.com/insus/p/3810032.html 将学到更好的方法重构。
写好这个公用的方法之后,我们去改写那些冗余的代码:

一步一个步骤,把程序写好......
ASP.NET开发,且编且改,分清职责的更多相关文章
- ASP.NET-FineUI开发实践-1
用.Net开发3年,主要接触资产管理,生产流程,质量追溯,.Net在这方面还是很靠谱的.2月低接触FineUI,那时版本是3.0+,第一眼让我想起了ExtJs,其实就是用.Net封装了ExtJs让AS ...
- ASP.NET-FineUI开发实践-9(四)
现在是这么个问题,在开发中表格是动态出来的,就是标准板是全部字段列出,客户要根据情况列出自己想要的,在增加操作页面的同时要是能用前台自带的功能直接保存到后台就好了,现在的列显示和隐藏是不回发的. 1. ...
- ASP.NET-FineUI开发
ASP.NET-FineUI开发 随笔分类 - FineUI ASP.NET-FineUI开发实践-10 摘要: 嵌套Grid,光棍月大放送,不藏着掖着.实在写的不好,没脸藏啊~只考虑显示排序修改 ...
- ASP.NET开发,简化与封装
ASP.NET开发,简化与封装 微软的ASP.NET的开发,就是面向对象的编程,当然前端也能体验至面向对象的话,使用Web控件也必须的. 任一控件,我们均可以在后端.aspx.cs或.aspx.vb程 ...
- ASP.NET开发大杂烩
ASP.NET开发大杂烩 正巧今天遇到一个获取动态生成table中的一个动态生成的TextBox的值的时候总是findcontrol不到.后来经过我们的徐总,瞬间解决,但是我觉得对于一个页面的声明周期 ...
- ASP.NET开发,从二层至三层,至面向对象 (5)
此是一系列博文,最后一篇了.也是面向初学者而作,望你们能有更好,更多对ASP.NET面向对编程了解与认识. 前一篇中<ASP.NET开发,从二层至三层,至面向对象 (4)>http://w ...
- ASP.NET开发,从二层至三层,至面向对象 (4)
继续上一篇<ASP.NET开发,从二层至三层,至面向对象 (3)>http://www.cnblogs.com/insus/p/3826706.html .我们更深层次学会了逻辑层对象,即 ...
- asp.net5开发中DNX SDK版本的影响
某次asp.net5开发中遇到了一个很奇怪的问题,引用部分的nuget包没有显示任何错误,如下图: 但是编译时出现了几百个错误: 错误基本都是形如“CS0246 The type or namespa ...
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
随机推荐
- 11.CrawlSpiders
CrawlSpiders 通过下面的命令可以快速创建 CrawlSpider模板 的代码: .scrapy startproject tencentspider .scrapy genspider - ...
- Python 高级编程 ——观察者模式
观察者模式的定义 :定义了对象之间一对多依赖,当一个对象改变状态时,这个对象的所有依赖者都会收到通知并按照自己的方式进行更新. 按照一个气象站的例子来看观察者模式 从气象站取得数据后要在三个布告牌显示 ...
- Django:model中的ForeignKey理解
有两个数据模型栏目模型和文章模型ArticleColumn和ArticlePost ArticleColumn: class ArticleColumn(models.Model): # 用户与栏目是 ...
- Windows核心编程:第4章 进程
Github https://github.com/gongluck/Windows-Core-Program.git //第4章 进程.cpp: 定义应用程序的入口点. // #include &q ...
- [Ynoi2015]此时此刻的光辉(莫队)
一道神题...自己写出来以后被卡常了...荣获洛谷最差解... 思路还是比较好想,对于每个数 \(\sqrt{n}\) 分块,对于 \(\sqrt{n}\) 以内的数,我们可以直接求出来.对于 \(\ ...
- day02 基本数据类型与运算符
day02 1.基本数据类型 2.算术运算符 +,-,*,/,%,++,-- 3.赋值运算符 =,+=,-=,*=,/=,%= 4.关系运算符 +=,-=,*=,/=,%= 结果是boolean类型 ...
- GITLAB安装笔记
CentOS 7 最小安装后操作 设置时区timedatectl set-timezone Asia/Shanghai 添加 Gitlab 清华源 vi /etc/yum.repos.d/gitlab ...
- [原创]K8_C段旁注工具6.0 新增SMB漏洞扫描
工具: K8_C段旁注工具6.0_0510[K.8]编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 201 ...
- How To Scan QRCode For UWP (1)
本文将介绍实现一个类似于微信扫一扫功能的UI界面,后续会再实现具体的识别二维码的功能. 实例使用的Win10 SDK Version是Windows 10 Anniversary Edition(10 ...
- How to change windows applicatioin's position via Win32 API
可以使用的Win32 API是: [DllImport("user32.dll")] private extern static bool SetWindowPos(IntPtr ...