此功能介绍:DataGridView频繁查询数据时,可以将每次查询到的数据结果保存到.xml文件中。并给用户提供前进、后退按钮操作.当用户想查看上一次的查询结果时,可直接从保存到的.xml文件中加载数据,提高查询速度。
/// <summary> /// DataGridView所在窗体功能前进与后退 ///文件格式: File$001.xml File$002.xml ///当前文件: File$003Cur.xml ///使用方法: /// 定义全局窗体级变量(以便各模块调用) /// HR.Controls.DataGridViewOperation.FunctionForwardBack FFB = new HR.Controls.DataGridViewOperation.FunctionForwardBack(); /// /// 在窗体启动时执行(以便删除上次未删除的临时保存文件) /// FFB.DeleteXmlFile(功能模块ID); /// /// 当数据源DataSource改变时 /// FFB.SaveXmlFile(功能模块ID, DataGridView控件名, 前进控件, 后退控件); /// /// 在窗体退出时执行(以便删除临时保存文件) /// BC.XmlFileDelete(功能模块ID) /// /// 在点击“前进”时执行 /// FFB.DataGridViewSetData(功能模块ID, DataGridView控件名, HR.Controls.DataGridViewOperation.FunctionForwardBack.ForwardBackOption.Forward, 前进控件, 后退控件); /// /// 在点击“后退”时执行 /// FFB.DataGridViewSetData(功能模块ID, DataGridView控件名, HR.Controls.DataGridViewOperation.FunctionForwardBack.ForwardBackOption.Back, 前进控件, 后退控件); /// </summary> public class FunctionForwardBack { #region DataGridView历史数据的前进、后退操作 /// <summary> /// 前进后退操作 /// </summary> /// <remarks></remarks> public enum ForwardBackward { /// <summary> /// 前进 /// </summary> Forward, /// <summary> /// 后退 /// </summary> Backward, } /// <summary> /// DataGridView控件前进或后退 /// </summary> /// <param name="FormID">功能编号</param> /// <param name="Dg">DataGridView控件</param> /// <param name="ForwardBack">前进或后退</param> /// <param name="ForwardControl">前进控件</param> /// <param name="BackwardControl">后退控件</param> /// <returns></returns> public bool SetDataGridViewData(string FormID, DataGridView Dg, ForwardBackward ForwardBack, object ForwardControl, object BackwardControl) { string CurDir = System.Windows.Forms.Application.StartupPath + "\\TempFile\\" + FormID + "\\"; if (!Directory.Exists(CurDir)) return false; if (this.GetFilesInCurrentDir(CurDir,"*.xml").Count<=0) //要查找的文件不存在 { return false; } DataSet ds = new DataSet(); try { ds.ReadXml(RestoreAllFile(FormID, ForwardBack, ForwardControl, BackwardControl)); Dg.DataSource = null; if (ds.Tables.Count>0) { Dg.DataSource = ds.Tables[0]; } SetContrl(FormID, ForwardControl, BackwardControl);//数据绑定完后,重新设置一下前进、后退按钮 return true; } catch { SetContrl(FormID, ForwardControl, BackwardControl); return false; } return true; } /// <summary> /// 将文件名全部重置,并返回当前文件 /// </summary> /// <param name="FormID">功能编号</param> /// <param name="ForwardBack">前进或后退</param> /// <param name="ForwardControl">前进控件</param> /// <param name="BackwardControl">后退控件</param> /// <returns>当前文件</returns> private string RestoreAllFile(string FormID, ForwardBackward ForwardBack, object ForwardControl, object BackwardControl) { int CurrentIndex = RestoreFileName(FormID, ForwardBack, ForwardControl, BackwardControl); if (CurrentIndex == 9999) return null; string CurDir = System.Windows.Forms.Application.StartupPath + "\\TempFile\\" + FormID + "\\"; ArrayList FileArry = this.GetFilesInCurrentDir(CurDir, "*.xml"); string SourceFile = string.Empty; string DestFile = string.Empty; switch (ForwardBack) { case ForwardBackward.Forward: //如果是前进 CurrentIndex++; //前当文件的索引加1 SourceFile =CurDir + FileArry[CurrentIndex].ToString(); if (File.Exists(SourceFile)) { DestFile=FileArry[CurrentIndex].ToString().Replace("File$","").Substring(0,3).Trim(); DestFile =CurDir + "File$" + DestFile.PadLeft(3,'0') + "Cur" + ".xml"; File.Copy(SourceFile, DestFile, true); System.Windows.Forms.Application.DoEvents(); File.Delete(SourceFile); } break; case ForwardBackward.Backward://如果是后退 CurrentIndex--; SourceFile = CurDir + FileArry[CurrentIndex].ToString(); if (File.Exists(SourceFile)) { DestFile = FileArry[CurrentIndex].ToString().Replace("File$", "").Substring(0, 3).Trim(); DestFile = CurDir + "File$" + DestFile.PadLeft(3, '0') + "Cur" + ".xml"; File.Copy(SourceFile, DestFile, true); System.Windows.Forms.Application.DoEvents(); File.Delete(SourceFile); } break; } return DestFile; } /// <summary> /// 将文件名全部重置,并返回当前文件索引 /// </summary> /// <param name="FormID">功能编号</param> /// <param name="ForwardBack">前进或后退</param> /// <param name="ForwardControl">前进控件</param> /// <param name="BackwardControl">后退控件</param> /// <returns>当前文件索引</returns> private int RestoreFileName(string FormID, ForwardBackward ForwardBack, object ForwardControl, object BackwardControl) { string CurDir = System.Windows.Forms.Application.StartupPath + "\\TempFile\\" + FormID + "\\"; ArrayList FileArry=this.GetFilesInCurrentDir(CurDir,"*.xml"); int CurrIndex = FileArry.Count - 1; //文件索引数 string SourceFile = string.Empty; string DestFile = string.Empty; for (int i = 0; i < FileArry.Count; i++) { if (FileArry[i].ToString().Length > 12) //文件列表中有File$xxxCur.xml的文件存在 { if (i==0 && ForwardBack==ForwardBackward.Backward) { return 9999; } if(i==FileArry.Count-1 && ForwardBack==ForwardBackward.Forward) { return 9999; } try { CurrIndex = i; SourceFile = CurDir + FileArry[i].ToString(); DestFile = FileArry[i].ToString().Replace("File$", "").Substring(0, 3).Trim(); DestFile = CurDir + "File$" + DestFile.PadLeft(3, '0') + ".xml"; File.Copy(SourceFile, DestFile); System.Windows.Forms.Application.DoEvents(); File.Delete(SourceFile); } catch { return 9999; } } } return CurrIndex; } #endregion #region DataGridView 每次查询时后将结果保存为xml文件 /// <summary> /// 保存数据结果到Xml文件,在数据结果变化前 /// </summary> /// <param name="FormID">功能编号</param> /// <param name="DG">要保存的DataGridView控件</param> /// <param name="ForwardControl">前进控件</param> /// <param name="BackControl">后退控件</param> /// <returns></returns> public bool SaveXmlFile(string FormID, DataGridView DG, object ForwardControl, object BackControl) { if (DG.DataSource == null) return false; string CurDir = System.Windows.Forms.Application.StartupPath + "\\TempFile\\" + FormID + "\\"; DirectoryInfo TempDir = new DirectoryInfo(CurDir); int MaxID = 1; if (!TempDir.Exists) TempDir.Create(); else MaxID = RenFileAll(FormID); string NewFileName = "File$" + MaxID.ToString().PadLeft(3, '0') + ".xml"; System.Data.DataTable dt = (System.Data.DataTable)DG.DataSource; dt.TableName = "HR"; dt.WriteXml(CurDir+NewFileName, XmlWriteMode.WriteSchema); System.Windows.Forms.Application.DoEvents(); GC.Collect(); SetContrl(FormID, ForwardControl, BackControl); return true; } /// <summary> /// 重置文件列表序列 /// </summary> /// <param name="FormID">功能编号</param> /// <returns></returns> private int RenFileAll(string FormID) { string CurDir = System.Windows.Forms.Application.StartupPath + "\\TempFile\\" + FormID + "\\"; ArrayList fileArry = null; fileArry = GetFilesInCurrentDir(CurDir, "*.xml"); int i=0; int CurIndex = 0; bool isDelFile=false; for (i =0; i< fileArry.Count; i++) { if (fileArry[i].ToString().Length>12) //文件是File$00xCur.xml形式的 { isDelFile = true; CurIndex = i + 1; } } if (isDelFile) //删除[File$00xCur.xml]这个文件后面的所有文件 { for ( i=CurIndex ; i < fileArry.Count; i++) { string SourFile = fileArry[i].ToString(); try { if (File.Exists(SourFile)) File.Delete(SourFile); } catch { } } } fileArry.Clear(); fileArry = GetFilesInCurrentDir(CurDir, "*.xml"); for (i = 0; i < fileArry.Count; i++) { if (fileArry[i].ToString().Length>12) { string SourFile = null; string DestFile = null; SourFile = CurDir + fileArry[i].ToString(); if (File.Exists(SourFile)) { DestFile = int.Parse(fileArry[i].ToString().Replace("File$", "").Substring(0, 3)).ToString().Trim(); DestFile = CurDir + "File$" + DestFile.PadLeft(3, '0') + ".xml"; File.Copy(SourFile, DestFile); File.Delete(SourFile); } } } return fileArry.Count + 1; } #endregion #region "查找文件在当前目录,不包括子目录" /// <summary> /// 查找文件在当前目录,不包括子目录 /// </summary> /// <param name="DirPath">要查找的文件夹.</param> /// <param name="FileExtName">文件扩展名</param> /// <returns></returns> private ArrayList GetFilesInCurrentDir(string DirPath, string FileExtName) { System.Collections.ArrayList FileArry = new ArrayList(); if (!string.IsNullOrEmpty(DirPath)) { DirectoryInfo RootDir = new DirectoryInfo(DirPath); if (RootDir.Exists) { try { foreach (FileInfo file in RootDir.GetFiles(FileExtName)) { FileArry.Add(file.Name); } } catch { } } } // FileArry.Sort(); return FileArry; } #endregion #region 前进、后退按钮的控制 /// <summary> /// 设置前进、后退控制的可用或不可用 /// </summary> /// <param name="FormID"></param> /// <param name="ForewardContrl"></param> /// <param name="BackwardContrl"></param> private void SetContrl(string FormID, object ForewardContrl, object BackwardContrl) { System.Windows.Forms.Application.DoEvents(); System.Windows.Forms.Application.DoEvents(); System.Windows.Forms.Application.DoEvents(); SetControlEnable(true, true, ForewardContrl, BackwardContrl); string CurDir = System.Windows.Forms.Application.StartupPath + "\\TempFile\\" + FormID + "\\"; DirectoryInfo TempDir = new DirectoryInfo(CurDir); if (!TempDir.Exists) { SetControlEnable(false, false,ForewardContrl,BackwardContrl); return; } ArrayList FileList = this.GetFilesInCurrentDir(CurDir, "*.xml"); if (FileList.Count < 2) { SetControlEnable(false, false, ForewardContrl, BackwardContrl); } else { for (int i = 0; i < FileList.Count; i++) { if (FileList[i].ToString().Length>12) { if (i == 0) SetControlEnable(true, false,ForewardContrl,BackwardContrl); if (i == FileList.Count - 1) SetControlEnable(false, true, ForewardContrl, BackwardContrl); } } } return; } /// <summary> /// 设置前后、后退按钮的可用状态 /// </summary> /// <param name="isForewardContrl">if set to <c>true</c> [is foreward contrl].</param> /// <param name="isBackwardContrl">if set to <c>true</c> [is backward contrl].</param> /// <param name="ForewardContrl">The foreward contrl.</param> /// <param name="BackwardContrl">The backward contrl.</param> /// <remarks>前后、后退按钮分三种类型[System.Windows.Forms.ToolStripButton],[System.Windows.Forms.Button],[System.Windows.Forms.toolStripMenuItem]</remarks> private void SetControlEnable(bool isForewardContrl, bool isBackwardContrl, object ForewardContrl, object BackwardContrl) { if (ForewardContrl != null) { if (ForewardContrl.GetType().ToString() == "System.Windows.Forms.ToolStripButton") { ((ToolStripButton)ForewardContrl).Enabled = isForewardContrl; } else if (ForewardContrl.GetType().ToString() == "System.Windows.Forms.Button") { ((System.Windows.Forms.Button)ForewardContrl).Enabled = isForewardContrl; } else if (ForewardContrl.GetType().ToString() == "System.Windows.Forms.ToolStripMenuItem") { ((System.Windows.Forms.ToolStripMenuItem)ForewardContrl).Enabled = isForewardContrl; } } if (BackwardContrl != null) { if (BackwardContrl.GetType().ToString() == "System.Windows.Forms.ToolStripButton") { ((System.Windows.Forms.ToolStripButton)BackwardContrl).Enabled = isBackwardContrl; } else if (BackwardContrl.GetType().ToString() == "System.Windows.Forms.Button") { ((System.Windows.Forms.Button)BackwardContrl).Enabled = isBackwardContrl; } else if (BackwardContrl.GetType().ToString() == "System.Windows.Forms.ToolStripMenuItem") { ((System.Windows.Forms.ToolStripMenuItem)BackwardContrl).Enabled = isBackwardContrl; } } } #endregion /// <summary> /// 窗体关闭或启动时需要删除文件 /// </summary> /// <param name="FormID">窗体ID编号</param> /// <returns></returns> public bool DeleteXmlFile(string FormID) { bool issuccess = true; string CurDir = System.Windows.Forms.Application.StartupPath + "\\TempFile\\" + FormID + "\\"; if (!Directory.Exists(CurDir)) return issuccess= false; ArrayList FileArry = this.GetFilesInCurrentDir(CurDir, "*.xml"); if (FileArry.Count > 1) { for (int i = 0; i < FileArry.Count; i++) { try { File.Delete(CurDir + FileArry[i].ToString()); issuccess= true; } catch (Exception ex) { MessageBox.Show(ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information); issuccess= false; } } } return issuccess; } }
发表评论
-
C# 实现将文件夹分卷压缩
2015-04-17 17:01 1250http://bbs.csdn.net/topics/3907 ... -
C#发送邮件
2015-04-17 15:58 702public class SendEmailHelper ... -
C# xml文件读取
2015-02-11 16:08 666看附件................ -
什么时候该用委托,为什么要用委托,委托有什么好处....
2015-01-29 16:56 823http://www.cnblogs.com/superpce ... -
C#中动态加载和卸载DLL
2015-01-26 14:02 1428在C++中加载和卸载DLL是一件很容易的事,LoadLibra ... -
转:c#常用的18种设计模式
2015-01-21 08:16 789http://blog.jobbole.com/78130/ -
C#委托的介绍(delegate、Action、Func、predicate)
2015-01-09 17:26 1147http://www.cnblogs.com/akwwl/p/ ... -
接口和抽象类有什么区别 .
2014-12-22 16:35 622接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么 ... -
C#一个简单写日志文件的类
2014-12-11 09:57 1115/// <summary> /// L ... -
Linq初级班 Linq to DataSet体验(单表、多表联合查询JOIN语法)
2014-12-10 14:34 365http://www.cnblogs.com/huangcon ... -
C#泛型详解
2014-11-29 11:31 487我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处 ... -
线程同步与异步的区别
2014-11-26 09:12 888异步处理就是按照不同步的程序处理问题。异步处理与同步处理是对立 ... -
应用C#和SQLCLR编写SQL Server用户定义函数 .
2013-10-09 17:07 491http://blog.csdn.net/zhzuo/arti ... -
log4Net简介
2013-06-30 11:32 580使用log4Net可以将系统听日志保存到DB、日志文件、邮箱中 ... -
c# 对INI配置文件的读取操作
2013-06-17 10:51 678此种方法只对如下格式的INI文件起作用 server=loca ... -
对DataGridView控件的扩展开发
2013-06-15 21:47 2389首先在项目中引用 ... -
对集合控件(ListBox,ComboBox,TreeView,RichTextBox,DataGridView)的查找、替换操作控件
2013-06-15 09:39 1555一、程序入口: using System; using ... -
C#对文件、文件夹操作公用组件
2013-06-11 09:46 973namespace HR.Class.IO { / ... -
TreeView控件操作开发篇之(五)
2013-06-09 00:09 830#region 加载文件夹及文件到树 ... -
TreeView控件操作开发篇之(五)
2013-06-08 23:14 2#region "查找遍历树节点" ...
相关推荐
"基于C#的WinForm中DataGridView控件操作汇总" 在C#的WinForm中,DataGridView控件是一种常见的控件,用于显示和编辑表格数据。下面将对DataGridView控件的操作进行汇总。 一、单元格内容的操作 在DataGridView...
### C# 中 DataGridView 删除行的经典操作详解 在C# 的 Windows Forms 应用程序开发中,`DataGridView` 控件是处理表格数据时非常常用的一个组件。它提供了丰富的功能来显示、编辑、添加或删除数据。本文将详细介绍...
在Windows Forms开发中,`DataGridView`控件是一个非常重要的组件,用于展示和操作表格数据。在本文中,我们将深入探讨`DataGridView`的各种操作方法及其功能实现,特别是如何格式化显示数据。 首先,让我们关注`...
本教程将深入探讨如何在`DataGridView`的一列单元格中实现多种操作方式。 首先,我们需要创建一个`DataGridView`实例并添加到窗体上。这通常在`Form1.Designer.cs`文件中完成,通过`Controls.Add(dataGridView1)`...
在ASP.NET开发中,数据管理是一个关键环节,而与数据库的交互、数据显示以及用户操作处理是其中的核心部分。本文将详细讲解如何利用ASP.NET实现通讯录应用,包括连接数据库、在dataGridView控件中显示数据、实现...
本篇文章将深入探讨如何在`DataGridView`中直接操作数据,以及与数据库的连接。 一、`DataGridView`控件的基本操作 1. 添加`DataGridView`控件:首先,你需要在Windows Forms设计器中从工具箱拖放`DataGridView`...
在本篇文章中,我们将探讨几个关于`dataGridView`的经典操作,包括如何填充数据、获取和修改单元格内容、设定单元格只读以及如何在行间导航。 首先,填充`dataGridView`的数据通常涉及数据库操作。以下是一个简单的...
例如,你可以创建一个窗体,将dataGridView与数据库表绑定,允许用户浏览记录、添加新记录、更新现有记录和删除记录。通过处理dataGridView的各种事件,可以实现数据验证、错误提示等功能。 总的来说,dataGridView...
### 操作DataGridView控件详解 #### 一、DataGridView控件简介 `DataGridView` 控件是.NET框架中的一个重要组件,主要用于Windows应用程序中展示和编辑数据。它具有高度的灵活性和丰富的特性,可以支持多种数据源,...
接下来,我们需要将`dataGridView`与`ContextMenuStrip`关联起来,这可以通过设置`DataGridView.ContextMenuStrip`属性实现: ```csharp dataGridView1.ContextMenuStrip = contextMenuStrip1; ``` 当用户在...
在我们的场景中,我们将利用这个模式来记录`DataGridView`在每次修改后的状态,以便于之后执行撤销或恢复操作。 首先,我们需要创建一个备忘录类,它将存储`DataGridView`的当前状态。这个类可能包含以下信息: 1....
### DataGridView操作技巧详解 #### 一、DataGridView基本属性设置 在使用DataGridView时,根据实际应用场景的不同,我们需要对一些关键属性进行设置。以下是一些常用的属性及其推荐设置: 1. **...
### C# Winform中DataGridView的操作 #### 概述 DataGridView 控件是Windows Forms应用程序中用于显示数据的强大工具。它能够方便地展示二维表格形式的数据,并提供了丰富的功能,如排序、筛选、编辑等。本文将...
C# DataGridView 操作 作为 WinForm 开发中最常用的控件之一,DataGridView 控件提供了丰富的操作接口用于处理数据展示和编辑。下面将总结 DataGridView 控件的各种操作,包括单元格内容的操作、属性设置等。 一、...
### 使用DataGridView显示与操作数据库 在.NET框架下开发Windows Forms应用程序时,经常需要用到DataGridView控件来展示和操作数据库中的数据。DataGridView控件提供了强大的数据绑定功能,并且支持各种数据源,如...
本篇文章将详细探讨DataGridView控件的一些核心操作,包括单元格操作、属性设置、遍历以及设置单元格的只读状态。 首先,我们关注单元格操作。要获取当前活动单元格的内容、列索引和行索引,可以使用以下代码: ``...
在.NET框架中,C#的DataGridView控件是一个强大的数据展示工具,它允许用户与数据进行交互,如查看、编辑、添加、删除等操作。在实际的项目开发中,经常需要实现复制、粘贴和删除等功能,以提升用户体验。本文将详细...
winForm扩展DataGridView控件实现一列多操作(如查看详情、修改、删除等)按钮,使用VB.NET语言通过扩展DataGridViewButtonCell单元格,在单元格内画按钮的方式来实现。具体效果请看我的博文...
C# DataGridView 的基本操作详解 C# DataGridView 是一个强大的控件,能够用来显示和编辑数据。通过 DataGridView,我们可以实现多种操作,例如取得或者修改当前单元格的内容、设定单元格只读、不显示最下面的新行...
vb.net操作DataGridView控件的用法的集合,包括: 1. DataGridView当前的单元格属性取得、变更 2. DataGridView编辑属性 3. DataGridView最下面一列新追加行非表示 4. DataGridView判断当前选中行是否为新追加的...