——自然框架,自然而然,快速开发、快速修改!
posted on 2008-05-25 17:32 金色海洋(jyk)阳光男孩 阅读(6740) 评论(40) 编辑 收藏
不用case, 用字典存储“ControlKind”和相应过程之间的对应关系就可以了。 回复 引用 查看
不错 回复 引用
是个思路 回复 引用 查看
对了,可以说是第一次使用vs2005来写程序,一直是使用vs2003来着,所以对一05里面的新下技术不太熟悉。 还想问一个问题,我现在用的是结构数组,换成类的话,哪个效率更高一点。 回复 引用 查看
利用数据库表结构生成asp.net页面代码和后台代码。 更灵活,以后想怎么改就怎么改,做成这种动态控件的形式,有点死,用户要求一点特殊方式的输入方式就适应不了。 回复 引用 查看
@金色海洋(jyk) 结构数组改成泛型数组 ControlInfos[] info List<ControlInfos> list = new List<ControlInfos>() 回复 引用 查看
@kiler 因为一直在使用vs2003,范型一直没有研究。 泛型数组 就是一种类的集合吧。 List<ControlInfos> 这里面的 ControlInfos 是结构还是类? 我最关心的是在范型内部,是否可以使用 T 的的具体的属性? 数据库表结构里面没有对控件的描述,我不知道使用什么控件,所以才要加一写描述信息。 对于一些特殊要求,可以变成一个子控件,加进去。 回复 引用 查看
@金色海洋(jyk) 刚才写错了应该是泛型集合不是泛型数组。 ControlInfos是类的类型 你说的泛型内部是什么啊 回复 引用 查看
就是说我好像可以这么写 public class aa { public void AddControls<T>(T t) { t.ColSysName = "1"; } } 这里的t,就不能写具体的属性或者函数。可能是我对范型的理解不对吧。 我想达到的效果是这样的 public void myBind<T>(T t) { ... //获取记录集,然后绑定控件,控件有外部传入,比如DataGrid、DataList等。 t.DataSource = myDataTable; t.DataBind(); } 这个是不行的,不知道有没有其他的方法,我想在分页控件件里使用。 如果使用vb.net的话,可以这么写 Public Sub myBind(ByVal obj As Object) ... '获取记录集,然后绑定控件,控件有外部传入,比如DataGrid、DataList等。 obj.datasource = myDataTable obj.databind() End Sub 编译是可以通过的。只要在运行的时候传递进来的对象拥有 datasource和databind() 就可以正确运行。 这个是我一直很郁闷的,不知道改成c#要怎么写? 回复 引用 查看
有点意思 回复 引用
照你这么搞的话美工都不用干活了, 其实用代码生成工具可以实现懒人的梦想,包括界面代码,比如李天平的代码生成工具 ,还能自己写插件扩展它,很方便的 回复 引用 查看
@金色海洋(jyk) 你那样写是不行的 这么写也许行 public void AddControls<T>(T t) where T : baseT { t.ColSysName = "1"; } baseT为一接口或者抽象类 里面有ColSysName 属性 回复 引用 查看
和美工是不冲突的,这个实用在后台管理、OA这方面的,至于网站的前台页面是不适用的。 代码生成器,生成的代码如何维护呢?不要告诉我,生成的代码永远都不会变了。 我不是发明重复的轮子,我是发明更好用的轮子。 回复 引用 查看
可能你写的实例代码太简单了,我有几个疑问: 第一:生成的界面如何控制了?你这完全是cs生成界面代码 第二:你这就处理了三种类型的控件,要是十几种呢,那里的case不像意大利面条一样?如何维护,如何扩展?有了新的控件需要添加进来我该怎么办? 如果你真的要这样干何不使用asp?我想能更好的满足你的需求 回复 引用 查看
@横刀天笑 你说的这些我都是我要解决的呀。 asp 不能保存状态,不能写自定义控件。或者说根本就没有控件的概念。 回复 引用 查看
如果用cs生成前台界面代码,我很难想象是什么结果,为什么不考虑使用一些框架?使用模板引擎也很灵活,或者使用代码生成器,这种重复劳动就交给代码生成器吧。或者做几个codesmith模板,需求改变的时候运行一下就ok了 asp里面是没有viewstate,不过要自己实现一个也不是很困难,asp里面虽然没有控件的概念不过可以实现控件的样子,我说使用asp纯粹是开玩笑的,只是看了LZ的代码回忆起那个年代 回复 引用 查看
不错 支持一下。 发现个错误 顺便提醒一下 “自己就可以幅值了” 回复 引用
哈哈.楼主总算换了模板 回复 引用 查看
一个factory加多个strategy就可以避免case了 我前段时间做了一个infopath控件生成,用的NVelocity,比较方便,而且UI也容易修改 回复 引用 查看
以前也做过这方面的东西 最难解决的就是 表单内部元素间的计算关系 比如 订货金额=订户单价×订货数量 计算去税金额 因为税率的不同 计算公式又不相同 不过处理简单的CRUD操作还是挺方便的 回复 引用
针对你的代码,我认为这样的结构比较好,嘿嘿. //--------------------------------------------------------------- public class DataItem{ public string DisplayName; public string ColumnName; // public ControlType ControlType; public object Value; public string Discription; } public enum ControlType{ Textbox, DropDownList, ... ... } private static Dictionary controlManagers; //也可以是Hashtable. private static void InitControlManagers(){ controlManagers = new Dictionary(); controlManagers.Add(ControlType.Textbox, new TextboxManager()); controlManagers.Add(ControlType.DropDownList, new DropDownListManager()); ... } // public interface ControlManager{ Control Create(DataItem dataItem); object GetValue(DataItem dataItem); } public class TextboxManager: ControlManager{ public Control Create(DataItem dataItem){ TextBox textbox = new TextBox(); textbox.Text = dataItem.Value.ToString(); textbox.Name = dataItem.ColumnName; // return textbox; } public object GetValue(DataItem dataItem){ ... // get control value by dataItem.ColumnName return ...; } } public class DropDownListManager: ControlManager{ public Control Create(DataItem dataItem){ DropDownList ddl = new DropDownList(); ... return ddl; } } //--------------------------------------------------------------- //----------------- 页面调用显示的时候 --------------------- public void ShowData(DataItem[] dataItems){ foreach(DataItem item in dataItems){ if(controlManagers.ContainsKey(item.ControlType)){ Control ctl = controlManagers[item.ControlType].Create(item); this.Controls.Add(ctl); } } } public void GetDatas(DataItem[] dataItems){ foreach(DataItem item in dataItems){ if(controlManagers.ContainsKey(item.ControlType)){ object value = controlManagers[item.ControlType].GetValue(item); ... ... } } } 回复 引用 查看
提出一点问题,没有办法对控件的布局进行样式控制,这里好像只能固定的格式,不方便维护。 回复 引用 查看
看你的東西真能讓人極髮寫代碼的情緒 如果我們公司現在的模式能做成一個通用的.如果可以有多人討論. 興趣是最好的朋友. 加油!你的思路,我也在想!只是有些蒙懂.多謝你的思維! 你的思路肯定因為做多了太重複的事情.就和我現在做的一樣! 回复 引用 查看
我很懒,我没有做什么重复的事情,因为我在作第二次(也许是第三次)的时候就在想偷懒的方法了。所以重复的事情做得不是太多。 回复 引用 查看
这里有个问题,就是生成出的控件位置摆放 回复 引用 查看
呵。喜欢楼主的帖子。 以前我在ASP中做过类似的功能。 也就是自动生成表单,我们有自己的叫法“屏幕配置” 大概总的结构是这样的:系统 -> 模块 -> 屏幕 -> 表(视图) -> 字段 就是将表或者视图的一些基本信息配置一下然后就能自动生成程序界面 生成的基本界面包括:录入、修改、查询、EXCEL导入/导出、审核、反审核等基本功能。 业务逻辑再通过特殊的接口添加进去。 刚刚完成的时候很兴奋,例如我想屏蔽页面上某些字段直接在“屏幕配置”表里将该字段的isView从 1 改成 0 就OK了。权限也能通过“屏幕配置信息表”进行管理。 我几年前做的几个项目用这样的原理,那些系统现在还有人在用,发现一些小问题现在自己都不愿意去维护了…… 回复 引用 查看
@relax 你能用asp就做到这些,真是太厉害了。 我还只能依靠asp.net的强大的控件功能,来做到这些。 回复 引用 查看
@金色海洋(jyk) 感觉C#好难啊!啥也看不懂!这周还在搞实训!!今天就是做什么名片查询@##¥%% 啥也不懂啦!!!! 回复 引用
支持,我想做一个了。 回复 引用 查看
楼主.下载地址那边好像找不到下载文件. 回复 引用 查看
http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html 这是新的下载地址,谢谢提醒,已经修改。 回复 引用 查看
大哥,sharepoint不知道你了解过吗?偶觉得和你的思路有点像啊。只是猜测。 回复 引用 查看
@rgqancy sharepoint还没听说过,不过这一方面的,基本思想都差不多。大同小异,只是实现方式上会有比较大的差别。 回复 引用 查看
应该加上一个条件就是在MIS系统很好用,但是在某些条件下是不适用的,罗列出最适用的场景好方便大家选择 回复 引用 查看
搞个设计器;按你的思路设计数据定义,将这个定义保存成XML(数据库表可以从这里生成)根据B/S或者是C/S需求,按数据定义生成画面定义数据比如:B/S的可以生成Html文件,有点MVC拙见 回复 引用
引用Crazy20090908:搞个设计器;按你的思路设计数据定义,将这个定义保存成XML(数据库表可以从这里生成)根据B/S或者是C/S需求,按数据定义生成画面定义数据比如:B/S的可以生成Html文件,有点MVC拙见赞同, 配置界面的时候只需要改文件配置就行了。。不过首先界面要进行布局。 回复 引用
赞同楼主的想法 回复 引用 查看
SaveDate?SaveData! 回复 引用 查看
维护一大堆表单确实很烦,楼主的方法我也想过,只是这样的方法,表单只能一行一个控件,UI上没办法控制,最好是能做到控件位置在Web界面上直接拖拉定位,这方法我已经有一些想法,但还没时间去实现出来。还有,比如下拉列表,怎么去初始化控件的值?有的下拉列表选项是固定的,而有的取值于另一个数据表,楼主可以讨论一下。 回复 引用 查看
也是可以一行多个控件的呀,并不是不可以解决的,只是没有想到方法,想到方法就可以解决了。下拉列表框的问题,早就解决了,没有什么问题的。 回复 引用 查看
Powered by: 博客园 Copyright © 金色海洋(jyk)阳光男孩