最近刚开始接触hibernate+spring+mvc+Easyui框架,也是刚开通了博客,希望能记录一下自己实践出来的东西,让其他人少走弯路。

转让正题,以个人浅薄的认识hibernate对于开发人员的作用主要是节省了写sql连接数据库的时间,而grid++report内部提供的类来看,却是通过ajax直接连接数据库,还是需要写sql。感觉把grid++report用到这个框架里来的话,给人的感觉就是一匹快马,拉了一辆旧车,虽然速度上影响不了多少,但是审美感觉上很不爽。作为一个完美主义的程序员来说,这是不允许的。然后我就贱贱的尝试着怎么改掉它。关于hibernate+spring+mvc+Easyui框架的东西我就不说了,我只说一下grid++report的使用。

  

  

  1、打开grid++report客户端,连接数据库并绘制报表。

2.绘制完成后使用记事本打开.grf文件,把里面的数据库连接给清掉。

3.添加mvc的三个文件在html中载入.grf文件这个不细说,grid++的demo里多的是。

4.修改载入的数据源url

  1. ReportViewer.Stop();
  2. ReportViewer.DataURL = "user/load";
  3. // var BeginDate = document.getElementById("txtBeginDate").value;
  4. // var EndDate = document.getElementById("txtEndDate").value;
  5. // var DataURL = encodeURI("xmlSummary.aspx?BeginDate=" + BeginDate + "&EndDate=" + EndDate);
  6. // ReportViewer.DataURL = DataURL;
  7.  
  8. //更新查询参数更新报表付标题,设置对应静态框的“Text”属性
  9. //ReportViewer.Report.ControlByName("SubTitle").AsStaticBox.Text = "日期范围:" + BeginDate + "至" + EndDate;
  10.  
  11. ReportViewer.Start();

5.在control中编写load方法获取数据源,由于框架中使用hibernate获得的数据源格式为IList<T>格式,而grid++中接收的是xml格式。所以需要方法把这给转换一下。

度娘告诉我是这样转

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml;
  6.  
  7. namespace Common.ToolsHelper
  8. {
  9. public class XMLHelperToList<T> where T : new()
  10. {
  11. #region 实体类转成Xml
  12. /// <summary>
  13. /// 对象实例转成xml
  14. /// </summary>
  15. /// <param name="item">对象实例</param>
  16. /// <returns></returns>
  17. public static string EntityToXml(T item)
  18. {
  19. IList<T> items = new List<T>();
  20. items.Add(item);
  21. return EntityToXml(items);
  22. }
  23.  
  24. /// <summary>
  25. /// 对象实例集转成xml
  26. /// </summary>
  27. /// <param name="items">对象实例集</param>
  28. /// <returns></returns>
  29. public static string EntityToXml(IList<T> items)
  30. {
  31. //创建XmlDocument文档
  32. XmlDocument doc = new XmlDocument();
  33. //创建根元素
  34. XmlElement root = doc.CreateElement(typeof(T).Name + "s");
  35. //添加根元素的子元素集
  36. foreach (T item in items)
  37. {
  38. EntityToXml(doc, root, item);
  39. }
  40. //向XmlDocument文档添加根元素
  41. doc.AppendChild(root);
  42.  
  43. return doc.InnerXml;
  44. }
  45.  
  46. private static void EntityToXml(XmlDocument doc, XmlElement root, T item)
  47. {
  48. //创建元素
  49. XmlElement xmlItem = doc.CreateElement(typeof(T).Name);
  50. //对象的属性集
  51. System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
  52.  
  53. foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
  54. {
  55. if (pinfo != null)
  56. {
  57. //对象属性名称
  58. string name = pinfo.Name;
  59. //对象属性值
  60. string value = String.Empty;
  61.  
  62. if (pinfo.GetValue(item, null) != null)
  63. value = pinfo.GetValue(item, null).ToString();//获取对象属性值
  64. //设置元素的属性值
  65. xmlItem.SetAttribute(name, value);
  66. }
  67. }
  68. //向根添加子元素
  69. root.AppendChild(xmlItem);
  70. }
  71.  
  72. #endregion
  73.  
  74. #region Xml转成实体类
  75.  
  76. /// <summary>
  77. /// Xml转成对象实例
  78. /// </summary>
  79. /// <param name="xml">xml</param>
  80. /// <returns></returns>
  81. public static T XmlToEntity(string xml)
  82. {
  83. IList<T> items = XmlToEntityList(xml);
  84. if (items != null && items.Count > )
  85. return items[];
  86. else return default(T);
  87. }
  88.  
  89. /// <summary>
  90. /// Xml转成对象实例集
  91. /// </summary>
  92. /// <param name="xml">xml</param>
  93. /// <returns></returns>
  94. public static IList<T> XmlToEntityList(string xml)
  95. {
  96. XmlDocument doc = new XmlDocument();
  97. try
  98. {
  99. doc.LoadXml(xml);
  100. }
  101. catch
  102. {
  103. return null;
  104. }
  105. if (doc.ChildNodes.Count != )
  106. return null;
  107. if (doc.ChildNodes[].Name.ToLower() != typeof(T).Name.ToLower() + "s")
  108. return null;
  109.  
  110. XmlNode node = doc.ChildNodes[];
  111.  
  112. IList<T> items = new List<T>();
  113.  
  114. foreach (XmlNode child in node.ChildNodes)
  115. {
  116. if (child.Name.ToLower() == typeof(T).Name.ToLower())
  117. items.Add(XmlNodeToEntity(child));
  118. }
  119.  
  120. return items;
  121. }
  122.  
  123. private static T XmlNodeToEntity(XmlNode node)
  124. {
  125. T item = new T();
  126.  
  127. if (node.NodeType == XmlNodeType.Element)
  128. {
  129. XmlElement element = (XmlElement)node;
  130.  
  131. System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
  132.  
  133. foreach (XmlAttribute attr in element.Attributes)
  134. {
  135. string attrName = attr.Name.ToLower();
  136. string attrValue = attr.Value.ToString();
  137. foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
  138. {
  139. if (pinfo != null)
  140. {
  141. string name = pinfo.Name.ToLower();
  142. Type dbType = pinfo.PropertyType;
  143. if (name == attrName)
  144. {
  145. if (String.IsNullOrEmpty(attrValue))
  146. continue;
  147. switch (dbType.ToString())
  148. {
  149. case "System.Int32":
  150. pinfo.SetValue(item, Convert.ToInt32(attrValue), null);
  151. break;
  152. case "System.Boolean":
  153. pinfo.SetValue(item, Convert.ToBoolean(attrValue), null);
  154. break;
  155. case "System.DateTime":
  156. pinfo.SetValue(item, Convert.ToDateTime(attrValue), null);
  157. break;
  158. case "System.Decimal":
  159. pinfo.SetValue(item, Convert.ToDecimal(attrValue), null);
  160. break;
  161. case "System.Double":
  162. pinfo.SetValue(item, Convert.ToDouble(attrValue), null);
  163. break;
  164. default:
  165. pinfo.SetValue(item, attrValue, null);
  166. break;
  167. }
  168. continue;
  169. }
  170. }
  171. }
  172. }
  173. }
  174. return item;
  175. }
  176. #endregion
  177. }
  178. }

然后自己获取数据并Response到页面上

方法如下。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.IO;
  7. using CLGL.Web.Controllers;
  8. using System.Text;
  9. using Wat.Common;
  10. using Domain;
  11. using System.IO.Compression;
  12. using Newtonsoft.Json;
  13. using System.Globalization;
  14. using Common.ToolsHelper;
  15.  
  16. namespace CLGL.Web.Areas.GrfDemo.Controllers
  17. {
  18. public class UserController : Controller
  19. {
  20. //
  21. // GET: /GrfDemo/User/
  22. Service.IUserManager userManage { get; set; }
  23. //User user = new User();
  24. public ActionResult Index()
  25. {
  26. return View();
  27. }
  28.  
  29. public ActionResult Load()
  30. {
  31. IList<User> list = userManage.LoadAll();
  32. string str = XMLHelperToList<User>.EntityToXml(list);
  33. Response.Write(str);
  34. Response.End();
  35. return View();
  36. }
  37. }
  38. }

运行后,结果:

hibernate+spring+mvc+Easyui框架模式下使用grid++report的总结的更多相关文章

  1. 对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识

    对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识   初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相 ...

  2. Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架

    Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架 初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相关资料,了解了框 ...

  3. Spring MVC + jpa框架搭建,及全面分析

    一,hibernate与jpa的关系 首先明确一点jpa是什么?以前我就搞不清楚jpa和hibernate的关系. 1,JPA(Java Persistence API)是Sun官方提出的Java持久 ...

  4. Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  5. [读后感]spring Mvc 教程框架实例以及系统演示下载

    [读后感]spring Mvc 教程框架实例以及系统演示下载 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&qu ...

  6. Spring MVC测试框架

    原文链接:http://jinnianshilongnian.iteye.com/blog/2004660 Spring MVC测试框架详解——服务端测试 博客分类: springmvc杂谈 spri ...

  7. Spring MVC测试框架详解——服务端测试

    随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用sp ...

  8. Spring MVC的异步模式

    高性能的关键:Spring MVC的异步模式   我承认有些标题党了,不过话说这样其实也没错,关于“异步”处理的文章已经不少,代码例子也能找到很多,但我还是打算发表这篇我写了好长一段时间,却一直没发表 ...

  9. IntelliJ IDEA 13.x 下使用Hibernate + Spring MVC + JBoss 7.1.1

    从2004年开始做.NET到现在.直到最近要做一些JAVA的项目,如果说100个人写一篇关于.NET的文章,估计这10个人写的内容都是一样.但是如果说10个人写Java的文章,那真的是10个人10种写 ...

随机推荐

  1. Java并发编程--同步容器

    BlockingQueue 阻塞队列 对于阻塞队列,如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤 ...

  2. ubuntu "mkdir -p"命令

    mkdir的-p选项允许你一次性创建多层次的目录,而不是一次只创建单独的目录.例如,我们要在当前目录创建目录Projects/a/src,使用命令: mkdir -p Project/a/src 而不 ...

  3. js运算符的优先级

    自上向下优先级降低 运算符 描述 . [] () 字段访问.数组下标.函数调用以及表达式分组 ++ -- - ~ ! delete new typeof void 一元运算符.返回数据类型.对象创建. ...

  4. VMware vSphere 6 Enterprise Plus License

    Product: VMware vSphere 6 Enterprise Plus Licensed for 2 physical CPUs (unlimited cores per CPU) Lic ...

  5. 手绘经典QQ头像 请让我一个人呆一会

                                    

  6. 【转】四步完成win7 ubuntu双系统安装(硬盘,无需光驱)

    原文网址:http://ifeiyang.cn/archives/1835.html 适用环境: 理论上win7.vista系统32位或64位均可.ubuntu适用与10.X版本,且ubuntu-10 ...

  7. MVC4.0系统开发新手历程(四)数据列表查询

    任何系统都不可避免的就是数据的查询展示,我觉得这里最值得一说的就是分部视图以及数据分页了 首先添加控制器 在控制其上面的名字为Index的Action上面右击,添加视图即可添加对应的视图,分部视图呈现 ...

  8. NOI2012 美食节

    http://www.lydsy.com/JudgeOnline/problem.php?id=2879 费用流. 我们发现,每个厨师做的倒数第k道菜对总等待时间的贡献为k*做这道菜的时间. 将每个厨 ...

  9. 推荐2个小工具 .NET reflector resharper

  10. Permutations 解答

    Question Given a collection of numbers, return all possible permutations. For example,[1,2,3] have t ...