博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET开发,且编且改,分清职责
阅读量:6322 次
发布时间:2019-06-22

本文共 1584 字,大约阅读时间需要 5 分钟。

本篇Insus.NET使用一个实例,分享在ASP.NET开发时,一个功能一个方法(函数),且编且改,一步一个脚印把实例完成。在方法多变多形式的情况之下,怎样把写出来程序简单明了。

 

下面是一个Excel文档:

 

现在是要读取它,并显示于GridView控件上,方法参考《》 由于一些字段在本篇中,无用,因此删除之。

"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在开发过程中,一旦发现有代码冗余,必需重构之,不然看上去就不舒服。创建一个方法吧:

有关这个方法,你还可以参考另外一篇《》 将学到更好的方法重构。

写好这个公用的方法之后,我们去改写那些冗余的代码:

 

 一步一个步骤,把程序写好......

转载地址:http://klcaa.baihongyu.com/

你可能感兴趣的文章
sshfs通过ssh挂载远程目录到本地
查看>>
Linux服务器负载均衡LB Cluster的LVS(NAT,DR)
查看>>
mysql分页原理 jsp
查看>>
JQuery筛选器
查看>>
一个简单的CMDSHELL后门
查看>>
基于微软Office Communicator 2007 Automation API开发应用
查看>>
《Java并发编程实践》学习笔记之二:线程安全性(thread-safe)
查看>>
本地化测试错误特征分析与测试方法
查看>>
Android NIO简易聊天室
查看>>
normal 、sysdba、 sysoper 、sys,sysdba,dba概念—区别
查看>>
HP VC模块更新失败-file is too big to handle
查看>>
Out of memory
查看>>
如何取消MDspamD进程窗口
查看>>
iptables 规则预设置为新centos系统
查看>>
centos5.5快速安装cacti0.8.7g
查看>>
云场景实践研究第51期:趣店
查看>>
集成Silverlight 2的AJAX框架 Visual WebGui
查看>>
Hyper-V 2016 系列教程9 虚拟机的基本属性
查看>>
SQL Server 2012 AlwaysOn Group 使用 Identity字段注意事项
查看>>
修改linux的最大文件句柄数限制
查看>>