很久以前就想实现这样一个功能,数据的展现和录入界面是根据数据库动态生成的,于是 创建了表的登记表 tables,专门用来登记 表的信息,columns字段表,专门用来登记表的字段信息,通过读取columns表中字段类型的信息,动态在界面上创建EDIT,COMBOBOX等一系列信息。各位大牛们有没有这样做过,界面的生成感觉有些难度,而且有些字段的长度也不同,甚至像COMBOBOX这样的字段需要绑定ITEMS值。有做过的朋友指点一下

解决方案 »

  1.   

    感觉还是要根据条件来看吧,首先从作业界面上划分,建不同的父类窗体,一般简单就是grid之类的,复杂的就是双档,即单头、单身、单尾、左边有的会有list列表。这部分估计占大头,要写不少东西,
    接下来就是每个单子上控件的生成,我一般做法是继续分类,当然这部分控件也可以重写的,一般是固定几种控件类型,再在控件上深入。就combobox而言,单独一个Columns估计搞不定,要一些更加详细的信息或者获取Items和keyItems的途径,如果是软件公司的话,一般也会写控件设定这些值和grid的字段绑定。
    细化后,一步一步来吧,应该不难
      

  2.   

    最简单的,以一个2列的stringgrid:
    列1:字段名
    列2:字段内容一行对应一个字段
      

  3.   

    应该不像4L说得那么简单吧,有枚举类型和图片类型的不好办咧,另外就算用stringgrid来做,把数据修改回数据库时也要按照数据库字段的类型再进行一次转换,比如使用sql语句插入的话,要注意数字文本,byte日期等的引号
    ,对于图片类型的字段要进行后续处理等等
    反正技术上能实现,就是个力气活,我以前用C#实现过
      

  4.   

    funxu,那段实现了的C#代码还有不?
    发小弟学习一下,痛哭流涕,万分感谢哦
    lzg827@sina.com
      

  5.   

    251450368@qq.com也来一个?哈哈
      

  6.   

    是的,主要就是让用户实现自定义,我公司产品也是这样,表格类的我已经做好,想写一个新的组件继承于scrollBox,可是字段的长度,属性这个东西太多,有点蒙了
      

  7.   

    动态创建控件的难度不是很大,根据数据库内容设置属性也不是很难,关键需要处理好以下四个问题:1、每次需要动态创建的控件数量不能太多,否则影响窗体加载速度。
    解决方法:可以动态创建一次,然后序列化成XML(NativeXML)或者DFM等文件格式,每次动态加载序列化后的内容。
    2、动态创建控件的布局管理是一个非常难受的事情,强力建议使用Delphi2010、XE、XE2等新版本。
    3、空间焦点跳转的控制。
    4、空间事件的加载。
    建议:参考微软Visual Stdio 2010之后推出的类似产品LightSwitch
      

  8.   

    可以考慮使用類似於 EControl_FormDesinger 這樣的控件來做運行時界面設計。
    而字段的定義(數據字典)則在數據庫中定義,FormDesinger輕松搞定動態界面布局後,設計的核心放在數據字典上,數據決定界面,支持數據的變化,程序設計的核心才能回歸問題域本質,不用過多考慮界面。動態定義字段,加載編輯界面,這個問題挺普遍的。但 Delphi 就是不主動支持。可以考慮按以下步驟測試: 
    1、數據來源:SQL語句,及對應的字段定義
    2、動態生成數據集,並按數據字典設定字段。
    3、將多個數據集綁定到一個預定義的Form上,預設的Form比一個全新的Form更好用,因為裡面可以有預寫的框架代碼,並針對不同的功能設定一樣預定義功能。這些框架代碼一般是解決權限問題及常用功能如:查找過濾報表編輯增刪改...等。
    4、用FormDesinger設定預定Form。在 Form 上加上DBEDIT,DBCOMBOBOX...這樣的字段編輯控件。
    5、程序加載運行。要好用,必須擴展“字段定義”,如果時間充足則可以考慮:
    1、只使用 TField中的屬性是不夠的,可考慮加上:字段編碼規則,字段輸入格式化規則,字段外鍵定義(Lookup),Tree節點樹支持,....等等
    2、多表連接時的更新支持及表之間的關聯更新(也可考慮用觸發器實現關聯更新)。
    3、什麼數據將被重復利用的問題,因為不同的 Form 往往共用很多相同可類似的 DataSet , 共用可以提高效率,簡單的全局數據就夠用了,但項目實踐中發現如果有區域共用區則更好。即進入某一模塊則創建一個共用區域,加載不同的Form,會充實共用區的數據,模塊退出該區域共用區的數據被清除。將程序設計的中心從界面中解脫出來,回歸“數據是活的”這個本質,從而嚐試解決,數據是活的,程序是死的這個編程難題。
      

  9.   


    EControl_FormDesinger 这个东西我也下载试过,可是都是安装不了的,楼上有没有 for d2007的安装。。感谢。不是太常上网,感谢前辈们的帮助