创建基于ECO的Weblog系统(2)

上一篇我们介绍了使用ECO创建Weblog的基础工作,包括建立ECO类图与数据映射、自动生成代码、创建数据库结构、设置数据连接等内容。现在我们着手处理ASP.net页面的控件关联与操作。其实ECO是这么一个工具,它是基于Delphi的(因为架构师有Bold的历史),看起来也离不开建模工具,但对于建模工具来说并不一定要使用Together(就是BDS嵌入的那个UML工具),它还可以使用ModelMaker,Modelmaker有个相应的版本支持ECO建模,而且它是把所有的文件打成一个包的,比Together分散文件也许要好一些,同时模型的导入导出,代码的同步可能做得更加优秀,使用它之前要卸载BDS中的Together….我们说跑题了,这方面的内容我们以后再介绍   J
我们将使用Post类表示每一条blog日志,Comment表示每一条评论,Category表示每一个blog的分类。创建这个EcoAsp.net项目的时候,系统默认给我们一个Webform1.aspx的空页,我们在上面点击Rename,改名为Blogs.aspx然后存盘。
每个aspx页面带有一个后缀为cs的文件,它负责在运行中创建与aspx页面相同id标称的页面与自定义对象,Eco的基础类操作等内容都在上面进行。
在IDE上面,我们可以看见这几部分,一个是页面的控件放置区,一个是系统控件或不可见控件的托盘区,最下面是aspx页面的代码区(我较怀念TP1.0和DOS时代,所以使用了Twinlight的色彩模式。
中间那个rhroot是一个ECO的reference handle,我们暂时把它看成是页面所有的数据的集中来源,随后我们创建的用于过滤和查询的expressionhandle等控件都要指向它。
        对于这些rhroot (roothandle) ,expressionhandle都需要好好理解,不能只从字面上、功能上去理解,还要从创作这些类的意图去理解,这样才不会用错,不要因为用错控件导致系统效率降低等问题,下面这两个图是从BDS的reference book中切出来的,大家见仁见智,回头有空再来书写有关handle的内容。
 
我们接着创建一个Category的aspx显示列表。 点击1,然后点击2,如果点错,ToolPalette就不会再现EnterpriseCoreObjects一类让你选择。
双击ExpressionHandle ,添加条件查询的控件.
此时ExpressionHandle添加到了rhRoot旁边
点击rhRoot,,然后我们在Object Inspector中可以看到下面的属性
请把rhRoot的Ecospacetype设置为ECOWeblogECOSpace,然后回车
点击Expresshandle1,请把RootHandle属性下拉并设置为rhRoot
好,现在存盘,编译
点击Expression属性的扩展选择窗口,这个扩展就是用来手动地设置对象的过滤等OCL操作,这个扩展选择窗口可以在运行时用代码唤起,而Expression也可以由我们在程序中自动修改。刚入门的朋友可以暂时理解它为SQL语句(有关OCL的内容请大家在我的Blog中查找资源)
这就是expression属性的扩展窗口,我刚把界面那个Classes的树展开了,我们可以看到有Category,comment,entry,post等类的列表。
我们双击Category,然后界面出现这样,同样,我把ocl operations操作列表也展开了。
可以看到,它可以使用更多的、对象化的"查询"条件。
然后双击.allInstances,表示进行一个select * from category的查询。返回所有的持久化了的对象条目。
可以看到Syntax is OK , 表示语法没问题,如果这些提示显示为红字,就是语法还没过关,虽然编译不出问题,但执行中会出异常。
 
接下去我们在页面中放入Datagrid控件。
选择自动套用格式,选择了专业1型
 
噢,忘了把expressionhandle1改名了,我们要把改为ehCategories,(eh表示expresshandle)
然后要把它的属性AddExternalId改为True,我们接下去在datagrid绑定中要用到。
在datagrid1上面点击右键,选择属性生成器,我们在属性生成器中编辑表格的宽度,列数,列名,表格的风格色彩等等
请选择数据源为ehCategories,数据键字段为ExternalId
接着我们选择“列”设置项,把可用列中的Name放置到选定列中去,这个Name是,类别(category)的名称。并且我们还要把页眉文本改为Categories。
 
注意把“在运行时自动创建列”的选择去掉,否则在表格显示的时候所有的隐含列都出来了.
点击确定之后,我们在设计页面中可以看到:
接着点击Button,把Web控件Button添加到设计页面中,用它来表示添加类条目功能,注意请先在Categories表格旁边先回车一下。不要让button控件贴着Datagrid,我们计划在右边放置blog的列表. 所以把所有的button都计划放在datagrid下方.
 
添加后的情况是这样:
真是 sorry, 我在书写的过程中把 Category 打成 Catetory , 这个错误需要在 ECO 的类设计图中进行更名 (rename) , 不要手动地在 Project Manager 中修改 , 以免 BDS 自动再生成代码 , 把原添加代码弄丢 . 那个 ehCategories expression 字符串也要进行修改,把 Catetory 改为 Catogory 就ok, 然后重新进行编译和存盘
我们可以在 Model View 中点击 Regenerate ECO source code ,这个功能帮我们重写自动生成的代码,但它是不会覆盖已写的函数的,这个对我们进行后期更名等工作有用。
还有就是这个 EcospaceProvider 上面的 Evolve Schema 功能,在我们加入新的类和结构的时候可以用它进行数据库结构的“升级”。
 
在设计器中双击“新类别”按键,我们为这个按键添加事件处理,把新的类别行加入到表格中。
              private void AddCategory_Click(object sender, System.EventArgs e)
              {
               Category NewCategory;
               NewCategory=new Category(this.EcoSpace);
               NewCategory.Name="新的类别";
               this.EcoSpace.UpdateDatabase();
               DataBind();
              }
然后,再次点击Datagrid1的属性生成器,把按钮列中的编辑、更新、取消,删除列添加到选定的列中。
然后选择Datagrid1的事件页把CancelCommand,DeleteCommand,EditCommand,UpdateCommand分别和自动生成的几个事件函数相连。
 
在添加后我发觉EditCommand好象对不上号,所以修改了一下:
       Private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
              {
            ((DataGrid)source).EditItemIndex = e.Item.ItemIndex;
                     DataBind();
              }
接着我们点可以点击运行了 :
 
 
 
 
 
 第三部分正在书写中.......
 
 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值