由于客户最近要扩充公司的业务,之前基于Winform+web开发混合式的系统已经不能满足他们的需求,需要从新对系统进行分区处理。

考虑到系统模块里面用到的GridView视图比较多,我就结合了DevExpress第三方GridControl简单的写了个Demo,对数据进行分组

排序。

主程序源码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using DevExpress.XtraGrid.Columns;
  10. using DevExpress.Data;
  11.  
  12. namespace GridViewSortTest
  13. {
  14. public partial class Form1 : Form
  15. {
  16. public Form1()
  17. {
  18. InitializeComponent();
  19. }
  20.  
  21. private void Form1_Load(object sender, EventArgs e)
  22. {
  23. InitLoad();
  24.  
  25. #region 分组排序代码
  26. GridColumnSortInfo[] sortInfo = {
  27. new GridColumnSortInfo(gdvSort.Columns["GET_YEAR"], ColumnSortOrder.Ascending),
  28. new GridColumnSortInfo(gdvSort.Columns["ID"], ColumnSortOrder.Descending),
  29. };
  30. gdvSort.SortInfo.ClearAndAddRange(sortInfo,);
  31.  
  32. #endregion
  33. }
  34.  
  35. /// <summary>
  36. /// 初始化GirdControl数据
  37. /// </summary>
  38. private void InitLoad()
  39. {
  40. gdcSort.DataSource= DBHelp.GetTable(string.Format(@"SELECT ID,NAME,GET_YEAR,
  41. URL_ADRRESS FROM TB_SORT_TEST"));
  42. }
  43.  
  44. /// <summary>
  45. /// GirdView单击事件
  46. /// </summary>
  47. /// <param name="sender"></param>
  48. /// <param name="e"></param>
  49. private void gdvSort_Click(object sender, EventArgs e)
  50. {
  51. if (gdvSort.FocusedColumn.FieldName.Equals(@"NAME") && gdvSort.GetFocusedRowCellValue("NAME") != null)
  52. {
  53. string url = gdvSort.GetFocusedRowCellValue("URL_ADRRESS").ToString()+
  54. gdvSort.GetFocusedRowCellValue("GET_YEAR").ToString() +
  55. MonthToString(int.Parse(gdvSort.GetFocusedRowCellValue("ID").ToString())) +
  56. gdvSort.GetFocusedRowCellValue("NAME").ToString()+".html";
  57. webBrowser.Navigate(url);
  58. }
  59. }
  60.  
  61. /// <summary>
  62. /// 月份转换成字符串
  63. /// </summary>
  64. /// <param name="month"></param>
  65. /// <returns></returns>
  66. private string MonthToString(int month)
  67. {
  68. if (month >= && month <= )
  69. return "" + month.ToString();
  70. else
  71. return month.ToString();
  72. }
  73. }
  74. }

DBHelp类源码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7.  
  8. namespace GridViewSortTest
  9. {
  10. public class DBHelp
  11. {
  12. //连接字符串
  13. static string strConn =@"Server=.\SQLEXPRESS; Database= SysBusiness; User Id=sa; Password=123456;Trusted_Connection = False ";
  14.  
  15. #region 执行查询,返回DataTable对象-----------------------
  16.  
  17. public static DataTable GetTable(string strSQL)
  18. {
  19. return GetTable(strSQL, null);
  20. }
  21. public static DataTable GetTable(string strSQL, SqlParameter[] pas)
  22. {
  23. return GetTable(strSQL, pas, CommandType.Text);
  24. }
  25. /// <summary>
  26. /// 执行查询,返回DataTable对象
  27. /// </summary>
  28. /// <param name="strSQL">sql语句</param>
  29. /// <param name="pas">参数数组</param>
  30. /// <param name="cmdtype">Command类型</param>
  31. /// <returns>DataTable对象</returns>
  32. public static DataTable GetTable(string strSQL, SqlParameter[] pas, CommandType cmdtype)
  33. {
  34. DataTable dt = new DataTable(); ;
  35. using (SqlConnection conn = new SqlConnection(strConn))
  36. {
  37. SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
  38. da.SelectCommand.CommandType = cmdtype;
  39. if (pas != null)
  40. {
  41. da.SelectCommand.Parameters.AddRange(pas);
  42. }
  43. da.Fill(dt);
  44. }
  45. return dt;
  46. }
  47.  
  48. #endregion
  49.  
  50. #region 执行查询,返回DataSet对象-------------------------
  51.  
  52. public static DataSet GetDataSet(string strSQL)
  53. {
  54. return GetDataSet(strSQL, null);
  55. }
  56.  
  57. public static DataSet GetDataSet(string strSQL, SqlParameter[] pas)
  58. {
  59. return GetDataSet(strSQL, pas, CommandType.Text);
  60. }
  61. /// <summary>
  62. /// 执行查询,返回DataSet对象
  63. /// </summary>
  64. /// <param name="strSQL">sql语句</param>
  65. /// <param name="pas">参数数组</param>
  66. /// <param name="cmdtype">Command类型</param>
  67. /// <returns>DataSet对象</returns>
  68. public static DataSet GetDataSet(string strSQL, SqlParameter[] pas, CommandType cmdtype)
  69. {
  70. DataSet dt = new DataSet(); ;
  71. using (SqlConnection conn = new SqlConnection(strConn))
  72. {
  73. SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);
  74. da.SelectCommand.CommandType = cmdtype;
  75. if (pas != null)
  76. {
  77. da.SelectCommand.Parameters.AddRange(pas);
  78. }
  79. da.Fill(dt);
  80. }
  81. return dt;
  82. }
  83. #endregion
  84.  
  85. #region 执行非查询存储过程和SQL语句-----------------------------
  86.  
  87. public static int ExcuteProc(string ProcName)
  88. {
  89. return ExcuteSQL(ProcName, null, CommandType.StoredProcedure);
  90. }
  91.  
  92. public static int ExcuteProc(string ProcName, SqlParameter[] pars)
  93. {
  94. return ExcuteSQL(ProcName, pars, CommandType.StoredProcedure);
  95. }
  96.  
  97. public static int ExcuteSQL(string strSQL)
  98. {
  99. return ExcuteSQL(strSQL, null);
  100. }
  101.  
  102. public static int ExcuteSQL(string strSQL, SqlParameter[] paras)
  103. {
  104. return ExcuteSQL(strSQL, paras, CommandType.Text);
  105. }
  106.  
  107. /// 执行非查询存储过程和SQL语句
  108. /// 增、删、改
  109. /// </summary>
  110. /// <param name="strSQL">要执行的SQL语句</param>
  111. /// <param name="paras">参数列表,没有参数填入null</param>
  112. /// <param name="cmdType">Command类型</param>
  113. /// <returns>返回影响行数</returns>
  114. public static int ExcuteSQL(string strSQL, SqlParameter[] paras, CommandType cmdType)
  115. {
  116. int i = ;
  117. using (SqlConnection conn = new SqlConnection(strConn))
  118. {
  119. SqlCommand cmd = new SqlCommand(strSQL, conn);
  120. cmd.CommandType = cmdType;
  121. if (paras != null)
  122. {
  123. cmd.Parameters.AddRange(paras);
  124. }
  125. conn.Open();
  126. i = cmd.ExecuteNonQuery();
  127. conn.Close();
  128. }
  129. return i;
  130.  
  131. }
  132.  
  133. #endregion
  134.  
  135. #region 执行查询返回第一行,第一列---------------------------------
  136.  
  137. public static int ExcuteScalarSQL(string strSQL)
  138. {
  139. return ExcuteScalarSQL(strSQL, null);
  140. }
  141.  
  142. public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras)
  143. {
  144. return ExcuteScalarSQL(strSQL, paras, CommandType.Text);
  145. }
  146. public static int ExcuteScalarProc(string strSQL, SqlParameter[] paras)
  147. {
  148. return ExcuteScalarSQL(strSQL, paras, CommandType.StoredProcedure);
  149. }
  150. /// <summary>
  151. /// 执行SQL语句,返回第一行,第一列
  152. /// </summary>
  153. /// <param name="strSQL">要执行的SQL语句</param>
  154. /// <param name="paras">参数列表,没有参数填入null</param>
  155. /// <returns>返回影响行数</returns>
  156. public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras, CommandType cmdType)
  157. {
  158. int i = ;
  159. using (SqlConnection conn = new SqlConnection(strConn))
  160. {
  161. SqlCommand cmd = new SqlCommand(strSQL, conn);
  162. cmd.CommandType = cmdType;
  163. if (paras != null)
  164. {
  165. cmd.Parameters.AddRange(paras);
  166. }
  167. conn.Open();
  168. i = Convert.ToInt32(cmd.ExecuteScalar());
  169. conn.Close();
  170. }
  171. return i;
  172.  
  173. }
  174.  
  175. #endregion
  176.  
  177. #region 查询获取单个值------------------------------------
  178.  
  179. /// <summary>
  180. /// 调用不带参数的存储过程获取单个值
  181. /// </summary>
  182. /// <param name="ProcName"></param>
  183. /// <returns></returns>
  184. public static object GetObjectByProc(string ProcName)
  185. {
  186. return GetObjectByProc(ProcName, null);
  187. }
  188. /// <summary>
  189. /// 调用带参数的存储过程获取单个值
  190. /// </summary>
  191. /// <param name="ProcName"></param>
  192. /// <param name="paras"></param>
  193. /// <returns></returns>
  194. public static object GetObjectByProc(string ProcName, SqlParameter[] paras)
  195. {
  196. return GetObject(ProcName, paras, CommandType.StoredProcedure);
  197. }
  198. /// <summary>
  199. /// 根据sql语句获取单个值
  200. /// </summary>
  201. /// <param name="strSQL"></param>
  202. /// <returns></returns>
  203. public static object GetObject(string strSQL)
  204. {
  205. return GetObject(strSQL, null);
  206. }
  207. /// <summary>
  208. /// 根据sql语句 和 参数数组获取单个值
  209. /// </summary>
  210. /// <param name="strSQL"></param>
  211. /// <param name="paras"></param>
  212. /// <returns></returns>
  213. public static object GetObject(string strSQL, SqlParameter[] paras)
  214. {
  215. return GetObject(strSQL, paras, CommandType.Text);
  216. }
  217.  
  218. /// <summary>
  219. /// 执行SQL语句,返回首行首列
  220. /// </summary>
  221. /// <param name="strSQL">要执行的SQL语句</param>
  222. /// <param name="paras">参数列表,没有参数填入null</param>
  223. /// <returns>返回的首行首列</returns>
  224. public static object GetObject(string strSQL, SqlParameter[] paras, CommandType cmdtype)
  225. {
  226. object o = null;
  227. using (SqlConnection conn = new SqlConnection(strConn))
  228. {
  229. SqlCommand cmd = new SqlCommand(strSQL, conn);
  230. cmd.CommandType = cmdtype;
  231. if (paras != null)
  232. {
  233. cmd.Parameters.AddRange(paras);
  234.  
  235. }
  236.  
  237. conn.Open();
  238. o = cmd.ExecuteScalar();
  239. conn.Close();
  240. }
  241. return o;
  242.  
  243. }
  244.  
  245. #endregion
  246.  
  247. #region 查询获取DataReader------------------------------------
  248.  
  249. /// <summary>
  250. /// 调用不带参数的存储过程,返回DataReader对象
  251. /// </summary>
  252. /// <param name="procName">存储过程名称</param>
  253. /// <returns>DataReader对象</returns>
  254. public static SqlDataReader GetReaderByProc(string procName)
  255. {
  256. return GetReaderByProc(procName, null);
  257. }
  258. /// <summary>
  259. /// 调用带有参数的存储过程,返回DataReader对象
  260. /// </summary>
  261. /// <param name="procName">存储过程名</param>
  262. /// <param name="paras">参数数组</param>
  263. /// <returns>DataReader对象</returns>
  264. public static SqlDataReader GetReaderByProc(string procName, SqlParameter[] paras)
  265. {
  266. return GetReader(procName, paras, CommandType.StoredProcedure);
  267. }
  268. /// <summary>
  269. /// 根据sql语句返回DataReader对象
  270. /// </summary>
  271. /// <param name="strSQL">sql语句</param>
  272. /// <returns>DataReader对象</returns>
  273. public static SqlDataReader GetReader(string strSQL)
  274. {
  275. return GetReader(strSQL, null);
  276. }
  277. /// <summary>
  278. /// 根据sql语句和参数返回DataReader对象
  279. /// </summary>
  280. /// <param name="strSQL">sql语句</param>
  281. /// <param name="paras">参数数组</param>
  282. /// <returns>DataReader对象</returns>
  283. public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras)
  284. {
  285. return GetReader(strSQL, paras, CommandType.Text);
  286. }
  287. /// <summary>
  288. /// 查询SQL语句获取DataReader
  289. /// </summary>
  290. /// <param name="strSQL">查询的SQL语句</param>
  291. /// <param name="paras">参数列表,没有参数填入null</param>
  292. /// <returns>查询到的DataReader(关闭该对象的时候,自动关闭连接)</returns>
  293. public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras, CommandType cmdtype)
  294. {
  295. SqlDataReader sqldr = null;
  296. SqlConnection conn = new SqlConnection(strConn);
  297. SqlCommand cmd = new SqlCommand(strSQL, conn);
  298. cmd.CommandType = cmdtype;
  299. if (paras != null)
  300. {
  301. cmd.Parameters.AddRange(paras);
  302. }
  303. conn.Open();
  304. //CommandBehavior.CloseConnection的作用是如果关联的DataReader对象关闭,则连接自动关闭
  305. sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  306. return sqldr;
  307. }
  308.  
  309. #endregion
  310.  
  311. #region 批量插入数据---------------------------------------------
  312.  
  313. /// <summary>
  314. /// 往数据库中批量插入数据
  315. /// </summary>
  316. /// <param name="sourceDt">数据源表</param>
  317. /// <param name="targetTable">服务器上目标表</param>
  318. public static void BulkToDB(DataTable sourceDt, string targetTable)
  319. {
  320. SqlConnection conn = new SqlConnection(strConn);
  321. SqlBulkCopy bulkCopy = new SqlBulkCopy(conn); //用其它源的数据有效批量加载sql server表中
  322. bulkCopy.DestinationTableName = targetTable; //服务器上目标表的名称
  323. bulkCopy.BatchSize = sourceDt.Rows.Count; //每一批次中的行数
  324.  
  325. try
  326. {
  327. conn.Open();
  328. if (sourceDt != null && sourceDt.Rows.Count != )
  329. bulkCopy.WriteToServer(sourceDt); //将提供的数据源中的所有行复制到目标表中
  330. }
  331. catch (Exception ex)
  332. {
  333. throw ex;
  334. }
  335. finally
  336. {
  337. conn.Close();
  338. if (bulkCopy != null)
  339. bulkCopy.Close();
  340. }
  341.  
  342. }
  343.  
  344. #endregion
  345. }
  346. }

最终显示效果图:

Winform中GridView分组排序实现功能的更多相关文章

  1. sql server 中判断分组排序的使用示例

    现在需要查询一组数据,是对一列字段(column01)的数据分范围查询后分组排序: select (case when [column01] >0 AND [column01]<= 500 ...

  2. oracle中的分组排序

    1.首先,需要建表. 表名:coursr(失误,表名写错了) 2.我们需要对每个课程进行排序. 3.知识准备: 分组排序函数有3种: row_number() over() rank() over() ...

  3. 025. asp.net中GridView的排序和过滤

    前台HTML代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defaul ...

  4. oracle中分组排序函数用法 - 转

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  5. oracle 分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示例和 ...

  6. MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能

    MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能 由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQ ...

  7. MYSQL-实现分组排序 对比 ORACLE 和SQLserver用 row_number() over(partition by ) 分组排序功能

    以下是个人笔记: 本文是为了理解 row_number() over(partition by )  和实现各种数据库的分组排序功能 select ROW_NUMBER()over( partitio ...

  8. 禁用datagridview中的自动排序功能

    把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...

  9. 2 weekend110的hadoop的自定义排序实现 + mr程序中自定义分组的实现

    我想得到按流量来排序,而且还是倒序,怎么达到实现呢? 达到下面这种效果, 默认是根据key来排, 我想根据value里的某个排, 解决思路:将value里的某个,放到key里去,然后来排 下面,开始w ...

随机推荐

  1. JS学习笔记 - 运动 - 淘宝轮播图

    <script> window.onload=function () { var oDiv=document.getElementById('play'); var aBtn=oDiv.g ...

  2. js中的$符号代表什么

    js中的$符号代表什么 一.总结 1.$:相当于document.getElementById(...) 2.$常用用法:每句话意思下面有,好东西 $("div p"); // ( ...

  3. 使用ClassyShark压缩你的项目

    原文链接 : Shrinking Your Build With No Rules and do it with Class(yShark) 原文作者 : Roberto Orgiu 译文出自 : 开 ...

  4. NSArray NSDictionary一些用法

    //从字符串分割到数组- componentsSeparatedByString: NSString *str = [NSString alloc] initWithString:@"a,b ...

  5. 用strace排查故障的5种简单方法(每日一译)

    原文链接:5 simple ways to troubleshoot using Strace 我很意外大部分人都不知道如何使用strace.strace一直是我的首选debug工具,因为它非常的有效 ...

  6. 在vue中使用font-awesome

    1.安装 cnpm i font-awesome -S 2.在main.js中引入 import 'font-awesome/css/font-awesome.min.css'

  7. Cygwin 与 MinGW/MSYS/MSYS2,如何选择?甚至还有GNU utilities for Win32

    Cygwin与MinGW/MSYS,如何选择? 2012-11-03更新:加入 MSYS 的内容. 2013-10-15更新:修改表格格式,加入介绍链接. 2014-12-17更新:加入 MSYS2 ...

  8. Android 报错 Error:(303, 27) 错误: 找不到符号 符号: 方法 sin(float) 位置: 类 FloatMath

    今天更新了sdk,升级到Android SDK 23.发现Android studio用23编译 SlidingMenu时出错,错误如下: 报错的地方这这里: float distanceInflue ...

  9. 【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysqlclient

    [送给在路上的程序猿] 对于一个开发人员而言,能够胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够利运用到系统中,由此简化系统的开发,是其架构生涯的第一步 ...

  10. 【u229】独木桥

    Time Limit: 1 second Memory Limit: 64 MB [问题描述] 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望 ...