Winfrom 基本处于忘光的阶段.先需要做个winfrom 的软件.然后自己扩展了DataGridView带分页的控件。废话不多说 上图先  

现在一步步实现其效果.

1.添加用户控件 上图即可知道布局以及怎么实现

2.代码如下

  1. #region 控件属性
  2.  
  3. /// <summary>
  4. /// 页大小
  5. /// </summary>
  6. public int PageSize
  7. {
  8. get;
  9. set;
  10. }
  11.  
  12. /// <summary>
  13. /// 总记录数
  14. /// </summary>
  15. public int DataSoureCount
  16. {
  17. get;
  18. set;
  19. }
  20.  
  21. /// <summary>
  22. /// 总页数
  23. /// </summary>
  24. public int PageCount
  25. {
  26. get;
  27. set;
  28. }
  29.  
  30. /// <summary>
  31. /// 当前记录行
  32. /// </summary>
  33. public int CurrentPageIndex
  34. {
  35. get;
  36. set;
  37. }
  38.  
  39. /// <summary>
  40. /// 取得或者设置数据控件的自定义列名
  41. /// </summary>
  42. public List<string> gdvColHeaderText
  43. {
  44. get;
  45. set;
  46. }
  47.  
  48. /// <summary>
  49. /// 取得或者设置绑定控件的数据集
  50. /// </summary>
  51. public DataTable GetGridDataSoure
  52. {
  53. get;
  54. set;
  55. }
  56.  
  57. /// <summary>
  58. /// 绑定数据到控件中
  59. /// </summary>
  60. public void DataBaind()
  61. {
  62. dgv.DataSource = GetGridDataSoure;
  63. lbSoureCount.Text = DataSoureCount.ToString();
  64. lbPageCount.Text = this.PageCount.ToString();
  65. lbPageSize.Text = this.PageSize.ToString();
  66. lbCurrentPageIndex.Text = this.CurrentPageIndex.ToString();
  67. DataGridViewStyle(dgv);
  68. if (gdvColHeaderText != null)
  69. {
  70. for (int i = ; i < gdvColHeaderText.Count; i++)
  71. {
  72. if (dgv.Columns.Count >= i)
  73. {
  74. dgv.Columns[i].HeaderText = gdvColHeaderText[i];
  75. }
  76. }
  77. }
  78.  
  79. if (IsVisibleFirstCom)
  80. {
  81. dgv.Columns[].Visible = false;
  82. }
  83. }
  84. //新增一列填充空余单元格
  85. bool tc_column = true;
  86.  
  87. /// <summary>
  88. /// DataGridView样式处理
  89. /// </summary>
  90. /// <param name="gridview">DataGridView控件</param>
  91. /// <param name="tc_column">是否需要添加列</param>
  92. public void DataGridViewStyle(DataGridView gridview)
  93. {
  94.  
  95. System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
  96. System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
  97. dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;//211, 223, 240
  98. dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)()))), ((int)(((byte)()))), ((int)(((byte)()))));
  99. dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)()));
  100. dataGridViewCellStyle2.ForeColor = System.Drawing.Color.Navy;
  101. dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
  102. dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
  103. gridview.AllowUserToAddRows = false;
  104. gridview.AllowUserToDeleteRows = false;
  105. dataGridViewCellStyle1.BackColor = System.Drawing.Color.LightCyan;
  106. Form f = new System.Windows.Forms.Form();
  107. gridview.AutoGenerateColumns = false;
  108.  
  109. gridview.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2;
  110. gridview.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
  111. gridview.EnableHeadersVisualStyles = false;
  112. gridview.GridColor = System.Drawing.SystemColors.GradientInactiveCaption;
  113. gridview.ReadOnly = true;
  114. //gridview.RowHeadersVisible = false;
  115. gridview.RowTemplate.Height = ;
  116. gridview.RowTemplate.ReadOnly = false;
  117. //标题文字居中
  118. gridview.ColumnHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
  119.  
  120. //gridview.RowHeadersVisible = false;
  121. gridview.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
  122. gridview.ColumnHeadersHeight = ;
  123.  
  124. //设置选择单元模式
  125. gridview.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
  126.  
  127. if (tc_column)
  128. {
  129. //设置默认填充列自动填充
  130. DataGridViewTextBoxColumn TextBoxColumn = new DataGridViewTextBoxColumn();
  131. TextBoxColumn.Name = "";
  132. TextBoxColumn.HeaderText = "";
  133. gridview.Columns.Insert(gridview.ColumnCount, TextBoxColumn);
  134. TextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
  135. //取消该列排序
  136. TextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
  137. tc_column = false;
  138. }
  139.  
  140. //点击立即进入编辑模式
  141. gridview.EditMode = DataGridViewEditMode.EditOnEnter;
  142. }
  143.  
  144. #endregion
  145.  
  146. #region 分页按钮事件
  147.  
  148. /// <summary>
  149. /// 首页
  150. /// </summary>
  151. /// <param name="sender"></param>
  152. /// <param name="e"></param>
  153. private void btnFirstPage_Click(object sender, EventArgs e)
  154. {
  155. this.CurrentPageIndex = ;
  156. PageChange_Click(sender, e);
  157. //按钮状态
  158. btnFirstPage.Enabled = false;
  159. btnLastPage.Enabled = true;
  160. btnNextPage.Enabled = true;
  161. btnPrevPage.Enabled = false;
  162. }
  163.  
  164. /// <summary>
  165. /// 上一页
  166. /// </summary>
  167. /// <param name="sender"></param>
  168. /// <param name="e"></param>
  169. private void btnPrevPage_Click(object sender, EventArgs e)
  170. {
  171. if (this.CurrentPageIndex >= )
  172. {
  173. btnPrevPage.Enabled = true;
  174. btnLastPage.Enabled = true;
  175. btnNextPage.Enabled = true;
  176. btnPrevPage.Enabled = true;
  177. this.CurrentPageIndex -= ;
  178. PageChange_Click(sender, e);
  179. }
  180. else
  181. {
  182. btnPrevPage.Enabled = false;
  183. btnFirstPage.Enabled = false;
  184. }
  185. }
  186.  
  187. /// <summary>
  188. /// 下一页
  189. /// </summary>
  190. /// <param name="sender"></param>
  191. /// <param name="e"></param>
  192. private void btnNextPage_Click(object sender, EventArgs e)
  193. {
  194. if (this.CurrentPageIndex < this.PageCount)
  195. {
  196. btnFirstPage.Enabled = true;
  197. btnLastPage.Enabled = true;
  198. btnNextPage.Enabled = true;
  199. btnPrevPage.Enabled = true;
  200. this.CurrentPageIndex += ;
  201. PageChange_Click(sender, e);
  202. }
  203. else
  204. {
  205. btnNextPage.Enabled = false;
  206. btnLastPage.Enabled = false;
  207. }
  208. }
  209.  
  210. /// <summary>
  211. /// 尾页
  212. /// </summary>
  213. /// <param name="sender"></param>
  214. /// <param name="e"></param>
  215. private void btnLastPage_Click(object sender, EventArgs e)
  216. {
  217. if (this.CurrentPageIndex < this.PageCount)
  218. {
  219. btnLastPage.Enabled = false;
  220. this.CurrentPageIndex = PageCount;
  221. PageChange_Click(sender, e);
  222. btnFirstPage.Enabled = true;
  223. btnNextPage.Enabled = false;
  224. btnPrevPage.Enabled = true;
  225. }
  226. else
  227. {
  228. btnLastPage.Enabled = false;
  229. btnNextPage.Enabled = false;
  230. }
  231. }
  232.  
  233. #endregion
  234.  
  235. /// <summary>
  236. /// 页改变的事件
  237. /// </summary>
  238. /// <param name="sender"></param>
  239. /// <param name="e"></param>
  240. public delegate void PageChange();
  241.  
  242. /// <summary>
  243. /// 页改变的委托事件
  244. /// </summary>
  245. public event EventHandler PageChange_Click;
  246.  
  247. /// <summary>
  248. /// 点击行的事件
  249. /// </summary>
  250. public delegate void clickRow();
  251.  
  252. /// <summary>
  253. /// 点击行的委托事件
  254. /// </summary>
  255. public event EventHandler dgvRows_Click;
  256.  
  257. /// <summary>
  258. /// 单一值
  259. /// </summary>
  260. public string singleValue
  261. {
  262. get;
  263. set;
  264. }
  265.  
  266. /// <summary>
  267. /// 多值
  268. /// </summary>
  269. public string manyValue
  270. {
  271. get;
  272. set;
  273. }
  274.  
  275. /// <summary>
  276. /// 设置需要取的单一值
  277. /// </summary>
  278. public string setSingleValue
  279. {
  280. get;
  281. set;
  282. }
  283.  
  284. /// <summary>
  285. /// 设置需要取的多值
  286. /// </summary>
  287. public string setManyValue
  288. {
  289. get;
  290. set;
  291. }
  292.  
  293. /// <summary>
  294. /// 设置默认单元格选择行事件为单击 如果为单击则为ture 双击为false
  295. /// </summary>
  296. protected bool tableCheck
  297. {
  298. get
  299. {
  300. bool isSinlgOrDoubleClick=true;
  301. ParameterModel tableCheckModel=new ParameterBLL().GetModelByID(, "");
  302. if (tableCheckModel == null)
  303. return isSinlgOrDoubleClick;
  304. else
  305. isSinlgOrDoubleClick=tableCheckModel.fParValue.ToUpper() == "Y" ? true : false;
  306. return isSinlgOrDoubleClick;
  307. }
  308. }
  309.  
  310. /// <summary>
  311. /// 双击单元格事件发生
  312. /// </summary>
  313. /// <param name="sender"></param>
  314. /// <param name="e"></param>
  315. private void dgv_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
  316. {
  317. //如果系统设置的为单击 则不促发双击
  318. if (tableCheck == true) return;
  319. if (e.RowIndex <= -) return;
  320. if (!string.IsNullOrEmpty(setSingleValue))
  321. {
  322. singleValue = dgv.Rows[e.RowIndex].Cells[setSingleValue].Value.ToString();
  323. }
  324. else
  325. {
  326. string[] keyItem = setManyValue.Split(',');
  327. string Values = string.Empty;
  328. foreach (string s in keyItem)
  329. {
  330. Values += dgv.Rows[e.RowIndex].Cells[s].Value.ToString() + ",";
  331. }
  332. Values = Values.Remove(Values.LastIndexOf(','));
  333. manyValue = Values;
  334. }
  335. dgvRows_Click(sender, e);
  336. }
  337.  
  338. /// <summary>
  339. /// 是否隐藏首列的值
  340. /// </summary>
  341. public bool IsVisibleFirstCom
  342. {
  343. get;
  344. set;
  345. }
  346.  
  347. /// <summary>
  348. /// 单击单元格事件发生
  349. /// </summary>
  350. /// <param name="sender"></param>
  351. /// <param name="e"></param>
  352. private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
  353. {
  354. //如果系统设置的为双击 则不促发单击
  355. if (tableCheck == false) return;
  356. if (e.RowIndex <= -) return;
  357. if (!string.IsNullOrEmpty(setSingleValue))
  358. {
  359. singleValue = dgv.Rows[e.RowIndex].Cells[setSingleValue].Value.ToString();
  360. }
  361. else
  362. {
  363. string[] keyItem = setManyValue.Split(',');
  364. string Values = string.Empty;
  365. foreach (string s in keyItem)
  366. {
  367. Values += dgv.Rows[e.RowIndex].Cells[s].Value.ToString() + ",";
  368. }
  369. manyValue = Values.Remove(Values.LastIndexOf(','));
  370. }
  371. dgvRows_Click(sender, e);
  372. }

3.如何使用

在页面在拖入控件.填充数据如下

  1. string sqlWhere = " where 1=1 and fState in(0,1) ";
  2.  
  3. if (!string.IsNullOrEmpty(txtArtNo.Text))
  4. {
  5. sqlWhere += string.Format(" and fArtNo like '%{0}%'", txtArtNo.Text);
  6. }
  7. if (!string.IsNullOrEmpty(txtBarCode.Text))
  8. {
  9. sqlWhere += string.Format(" and fBarCode like '%{0}%'", txtBarCode.Text);
  10. }
  11. if (!string.IsNullOrEmpty(txtItemName.Text))
  12. {
  13. sqlWhere += string.Format(" and fItemName like '%{0}%'", txtItemName.Text);
  14. }
  15. if (ddlBigClassID.SelectedValue.ToString() != "-100")
  16. {
  17. sqlWhere += string.Format(" and fBigClassID = '{0}'", ddlBigClassID.SelectedValue);
  18. }
  19. if (ddlMidClassID.SelectedValue != null && ddlMidClassID.SelectedValue .ToString()!= "-100")
  20. {
  21. sqlWhere += string.Format(" and fMidClassID = '{0}'", ddlMidClassID.SelectedValue);
  22. }
  23. if (ddlSubClassID.SelectedValue != null && ddlSubClassID.SelectedValue.ToString() != "-100")
  24. {
  25. sqlWhere += string.Format(" and fSubClassID = '{0}'", ddlSubClassID.SelectedValue);
  26. }
  27.  
  28. ItemBaseBLL bll = new ItemBaseBLL();
  29. fgivItem.PageSize = ;
  30. int CurrentPageIndex = fgivItem.CurrentPageIndex == ? fgivItem.CurrentPageIndex += : fgivItem.CurrentPageIndex += ;
  31. fgivItem.CurrentPageIndex = CurrentPageIndex;
  32. fgivItem.GetGridDataSoure = bll.GetDateSoure(sqlWhere, "fItemID", "fItemID,fBigClassName,fMidClassName,fSubClassName,fItemName,fArtNo,fBarCode,fImportPrice,fSalePrice,fPrice1,fInVeryPrice,fCostPrice,fStateText", fgivItem.PageSize, fgivItem.CurrentPageIndex);
  33. int totalCount = bll.GetCount(sqlWhere);
  34. fgivItem.DataSoureCount = totalCount;
  35. int totalPageNum = (totalCount % fgivItem.PageSize) > ? ((totalCount / fgivItem.PageSize) + ) : (totalCount / fgivItem.PageSize);
  36. fgivItem.gdvColHeaderText = new List<string> {"商品编号", "商品大类", "商品中类", "商品小类", "商品名称", "商品货号", "商品条码", "进价", "售价", "活动价", "换购价", "成本价", "状态" };
  37. fgivItem.PageCount = totalPageNum;
  38. fgivItem.setSingleValue = "fItemID";
  39. fgivItem.IsVisibleFirstCom = true;
  40. fgivItem.DataBaind();

winfrom dataGridView 自定义分页实现的更多相关文章

  1. C# DataGridView自定义分页控件

    好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...

  2. winform中DataGridView实现分页功能

    WinForm轻松实现自定义分页 (转载) WinForm轻松实现自定义分页 (转载)   转载至http://xuzhihong1987.blog.163.com/blog/static/26731 ...

  3. asp.net webform 自定义分页控件

    做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...

  4. Python之路【第十九篇】自定义分页实现(模块化)

    自定义分页 1.目的&环境准备 目的把分页写成一个模块的方式然后在需要分页的地方直接调用模块就行了. 环境准备Django中生成一个APP并且注册,配置URL&Views 配置URL ...

  5. MVC下分页的自定义分页一种实现

    1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...

  6. Django自定义分页、bottle、Flask

    一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1"> ...

  7. Mvc自定义分页控件

    MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候, ...

  8. MVC自定义分页

    MVC自定义分页 之前我发表了一篇MVC无刷新分页的文章,里面用的是MvcPager控件,但是那个受那个控件限制,传值只能用PagedList,各方面都受到了限制,自由度不够高,现在还是做MVC无刷新 ...

  9. PHPCMS快速建站系列之自定义分页函数

    内容分页的实现方法:{pc:content action="lists" catid="$catid" order="id DESC" nu ...

随机推荐

  1. SilverLight页面跳转(转载)

    // Silverlight页面的跳转 // (Application.Current.RootVisualasIContent).Content=newDragControl(); //Silver ...

  2. 1009-2的N次方

    描述 编程精确计算2的N次方.(N是介于100和1000之间的整数). 输入 正整数N (100≤N≤1000) 输出 2的N次方 样例输入 200 样例输出 16069380442589902755 ...

  3. POJ2676Sudoku

    http://poj.org/problem?id=2676 题意 : 这个是我最喜欢玩的数独了,就是一个9乘9的宫格,填上1到9九个数字,每行每列每个宫格之内不能有重复的数字,给出的九宫格中,0是待 ...

  4. 网络上下载的Ghost系统含威胁

  5. 【Apache运维基础(1)】Apache的安装与使用

    安装 yum -y install httpd httpd-devel # 在Ubuntu里面叫做Apache2,输入localhost能打开就算成功了 额...当然专业的运维还是老老实实的去编译吧; ...

  6. springmvc文件上传2中方法

    基于前面文章的基础上. 一.准备 需要的jar  二.配置 1.  spmvc-servlet.xml <?xml version="1.0" encoding=" ...

  7. Android ActionBar中的下拉菜单

    在ActionBar中添加下拉菜单,主要有一下几个关键步骤: 1. 生成一个SpinnerAdapter,设置ActionBar的下拉菜单的菜单项 2. 实现ActionBar.OnNavigatio ...

  8. oracle 判断是不是数值/数字

    1. 利用 to_number CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)     RETURN NUMBER IS     v_st ...

  9. SecureCRT访问开发板linux系统

    前言: 最近在用OK6410开发板跑linux系统,经常在终端上敲一些指令,无奈开发板屏幕太小用起来非常不方便,所以使用终端一款能运行在windows上的软件与开发板连接,直接在电脑上操作开发板了,这 ...

  10. 国内顺利使用Google的另类技巧

    在特殊的地方和特殊的时间,流畅顺利使用Google的方法也会变得很特殊.本文不定期保持维护更新,删除不能用的,增加新的网址. 分享一些奇葩的Google使用方法,通过下列网址也可以使用Google来搜 ...