此功能介绍: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 1142http://bbs.csdn.net/topics/3907 ... -
C#发送邮件
2015-04-17 15:58 648public class SendEmailHelper ... -
C# xml文件读取
2015-02-11 16:08 580看附件................ -
什么时候该用委托,为什么要用委托,委托有什么好处....
2015-01-29 16:56 787http://www.cnblogs.com/superpce ... -
C#中动态加载和卸载DLL
2015-01-26 14:02 1384在C++中加载和卸载DLL是一件很容易的事,LoadLibra ... -
转:c#常用的18种设计模式
2015-01-21 08:16 722http://blog.jobbole.com/78130/ -
C#委托的介绍(delegate、Action、Func、predicate)
2015-01-09 17:26 1055http://www.cnblogs.com/akwwl/p/ ... -
接口和抽象类有什么区别 .
2014-12-22 16:35 588接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么 ... -
C#一个简单写日志文件的类
2014-12-11 09:57 1070/// <summary> /// L ... -
Linq初级班 Linq to DataSet体验(单表、多表联合查询JOIN语法)
2014-12-10 14:34 328http://www.cnblogs.com/huangcon ... -
C#泛型详解
2014-11-29 11:31 446我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处 ... -
线程同步与异步的区别
2014-11-26 09:12 843异步处理就是按照不同步的程序处理问题。异步处理与同步处理是对立 ... -
应用C#和SQLCLR编写SQL Server用户定义函数 .
2013-10-09 17:07 449http://blog.csdn.net/zhzuo/arti ... -
log4Net简介
2013-06-30 11:32 542使用log4Net可以将系统听日志保存到DB、日志文件、邮箱中 ... -
c# 对INI配置文件的读取操作
2013-06-17 10:51 651此种方法只对如下格式的INI文件起作用 server=loca ... -
对DataGridView控件的扩展开发
2013-06-15 21:47 2330首先在项目中引用 ... -
对集合控件(ListBox,ComboBox,TreeView,RichTextBox,DataGridView)的查找、替换操作控件
2013-06-15 09:39 1522一、程序入口: using System; using ... -
C#对文件、文件夹操作公用组件
2013-06-11 09:46 932namespace HR.Class.IO { / ... -
TreeView控件操作开发篇之(五)
2013-06-09 00:09 787#region 加载文件夹及文件到树 ... -
TreeView控件操作开发篇之(五)
2013-06-08 23:14 2#region "查找遍历树节点" ...
相关推荐
DataGridView的各种操作方法,DataGridView的功能实现,DataGridView的属性!
DataGridView操作技巧
c# datagridView 经典操作 完全版
基于C#的WinForm中DataGridView控件操作汇总
c# 中datagridView中删除行的经典操作
C#DataGridView操作 C#DataGridView操作 C#DataGridView操作 C#DataGridView操作
DataGridView控件的各种操作总结(单元格操作,属性设置) 一、单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index Console....
完全再 DataGridVIew 中对数据 直接 操作
DataGridView 实现一列单元格 显示多操作方式 DataGridView 实现一列单元格 显示多操作方式
vb.net操作DataGridView控件的用法的集合,包括: 1. DataGridView当前的单元格属性取得、变更 2. DataGridView编辑属性 3. DataGridView最下面一列新追加行非表示 4. DataGridView判断当前选中行是否为新追加的...
连接数据库 dataGridView数据的显示 dataGridView定位 dataGridView修改 删除
dataGridView右鍵操作的实现C#
DataGridView属性DataGridView属性DataGridView属性DataGridView属性DataGridView属性DataGridView属性DataGridView属性DataGridView属性
DataGridView控件用法合集 1. DataGridView当前的单元格属性取得、变更 2. DataGridView编辑属性 3. DataGridView最下面一列新追加行非表示 4. DataGridView判断当前选中行是否为新追加的行 5. DataGridView删除行...
操作DataGridView有两种方式,一种是使用控件绑定的方式,操作的时候只要更改DataSet控件的数据集就能够实现DataGridView数据的灵活显示;另一种方式是全部使用代码来手工操作DataGridView控件的显示,尽量少用控件...
重写DataGridView实现shift键与DataGridView复选框的结合,类似与资源管理器中的shift按键功能
用DataGridView显示和操作数据库
datagridview
DataGridView_显示和操作数据库
c#中dataGridView数据绑定后的数据操作