网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

ASP.NET Web开发框架之五 控件扩展

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05

当在Web页面中设计好表格布局之后,运用Enterpris Solution提供的框架,以可视化的方式绑定数据。

首先,请在配置文件中添加如下的程序集引用,以方便框架运用反射找到当前项目所引用的实体层。

然后打开Visual Studio,在设计时面板中,选择一个控件。

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' title="image" alt="image" border="0" src="/uploadfile/201301/5/72152621406.png" /> 

如上图所示,选择控件的DataBindingString属性,在属性面板中打开它。如果已经绑定了属性,它会自动高亮显示已经绑定的实体及其属性。这个属性的代码设计,是这样的

  1. [Category(CategoryName.OPTIONS)]  
  2. [DefaultValue("")]  
  3. [Description("Data Binding")]  
  4. [Editor(typeof(QueryBindingTypeDialogEditor), typeof(UITypeEditor))]  
  5. public virtual string DataBindingString  
  6.  {  
  7.             get 
  8.             {  
  9.                 object obj = XState["DataBindingString"];  
  10.                 return obj != null ? obj.ToString() : "";  
  11.             }  
  12.             set 
  13.             {  
  14.                 XState["DataBindingString"] = value;  
  15.             }  

如代码所示,它提供了一个自定义的属性编辑器,也就是上图中我们看到的Query Builder,绑定属性。

返回所需要绑定属性的关键代码如下所示,它读取实体层程序集并返回用户所选择的属性值

  1. string path = "";  
  2. IWebApplication webApp = (IWebApplication)provider.GetService(typeof(IWebApplication));  
  3. Configuration config = webApp.OpenWebConfiguration(true);  
  4. AppSettingsSection app = config.AppSettings;  
  5. path = app.Settings["Assembly"].Value; 

这几句代码的含义,从当前Web项目中打开Web.config配置文件,并找到文章开头设置的实体层程序集。

代码生成

基于模板的代码生成器,例如Code Smith,给代码生成带来了极大的便利。Enterprise Solution相关的代码生成,均以Code Smith模板完成。熟悉ASP.NET的语法,应该可以很快熟悉Code Smith的语法并对它的生产力感到满意。

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' title="image" alt="image" border="0" src="/uploadfile/201301/5/38152621163.png" />

在最新版本的Code Smith 6.5中,支持.NET 3.x/4.0语法。还可以运用它的SDK,把代码生成功能集成到自己的开发工具中。比如,我想制作一个批量代码生成的工具,直接调用Code Smith的模板文件:

  1. public  void RunTemplate(string templateFile,string connectionString,string tableName,string targetFile)  
  2. {  
  3.             CodeTemplateCompiler compiler = new CodeTemplateCompiler(templateFile);  
  4.             compiler.Compile();  
  5.  
  6.             if (compiler.Errors.Count == 0)  
  7.             {  
  8.                 CodeTemplate template = compiler.CreateInstance();  
  9.                  
  10.                 DatabaseSchema database = new DatabaseSchema(new SqlSchemaProvider(), connectionString);  
  11.                 TableSchema tableSchema = database.Tables[tableName];                
  12.  
  13.                 //如果都是字符串,应该要考虑bool,int,object  
  14.                 Dictionary<stringobject> dic = new Dictionary<stringobject>();  
  15.                 string[] paramterValues = rtfParameter.Lines;  
  16.                 foreach (string parm in paramterValues)  
  17.                 {  
  18.                     if (!String.IsNullOrEmpty(parm))  
  19.                     {  
  20.                         string[] values = Regex.Split(parm, "=");  
  21.                         string key = values[0];  
  22.                         object para =values[1].ToString().Trim();  
  23.                         if (string.IsNullOrEmpty(values[1]))  
  24.                             para = tableSchema;  
  25.  
  26.                         dic.Add(values[0], para);  
  27.                     }  
  28.                 }  
  29.                 PropertyInfo[] pis = template.GetProperties();  
  30.                 foreach (PropertyInfo pi in pis)  
  31.                 {  
  32.                     object val=null;  
  33.                     if(dic.TryGetValue(pi.Name,out val))                      
  34.                       template.SetProperty(pi, val);  
  35.                 }     
  36.         
  37.                 if(File.Exists(targetFile))  
  38.                     File.Delete(targetFile);  
  39.                 using (StreamWriter writer = new StreamWriter(targetFile))  
  40.                 {  
  41.                     template.Render(writer);  
  42.                     writer.Flush();                      
  43.                 }  
  44.         }  

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号