⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commonexport.cs

📁 C#自定义查询控件
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.IO;
using System.Data;
using System.Data.Odbc;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace CommonComponent.CommonIE
{
	/// <summary>
	/// 
	/// </summary>
	public class CommonExport : System.ComponentModel.Component
	{
		public CommonExport()
		{
			// 
			// TODO: Add constructor logic here
			//
		}

		/// <summary>
		/// 导出文件名
		/// </summary>
		private string fileName;
		/// <summary>
		/// 导出后是否自动打开
		/// </summary>
		private bool autoOpen;
		/// <summary>
		/// 自动取得文件名
		/// </summary>
		private bool autoGetFileName;
		/// <summary>
		/// 需要导出的数据表
		/// </summary>
		private DataTable table;
		/// <summary>
		/// 选择导出的字段
		/// </summary>
		private bool selectField;
		/// <summary>
		/// 显示进度条
		/// </summary>
		private bool showProgress;
		private OutFieldCollection outFields = new OutFieldCollection();
		/// <summary>
		/// 自动取得导出文件名
		/// </summary>
		public bool AutoGetFileName
		{
			get
			{
				return autoGetFileName;
			}
			set
			{
				autoGetFileName = value;
			}
		}

		/// <summary>
		/// 导出完成后自动打开文件
		/// </summary>
		public bool AutoOpen
		{
			get
			{
				return autoOpen;
			}
			set
			{
				autoOpen = value;
			}
		}

		/// <summary>
		/// 导出文件名称
		/// </summary>
		public string FileName
		{
			get
			{
				return fileName;
			}
			set
			{
				fileName = value;
			}
		}

		/// <summary>
		/// 导出时选择文件名
		/// </summary>
		public bool SelectField
		{
			get
			{
				return selectField;
			}
			set
			{
				selectField = value;
			}
		}

		/// <summary>
		/// 导出时显示进度条
		/// </summary>
		public bool ShowProgress
		{
			get
			{
				return showProgress;
			}
			set
			{
				showProgress = value;
			}
		}

		/// <summary>
		/// 需要导出的数据表
		/// </summary>
		public DataTable Table
		{
			get
			{
				return table;
			}
			set
			{
				table = value;
			}
		}

		/// <summary>
		/// 判断是否可以导出数据
		/// </summary>
		/// <returns>是否要以导出</returns>
		private bool ReadyToExport()
		{
			if (table == null)
				return false;
			if (table.Rows.Count == 0)
				return false;
			return true;
		}

		private int GetColumnLength(string columnName)
		{
			Int32 length;
			Int32 i;
			try
			{
				length = 1;
				foreach (DataRow drow in table.Rows)
				{
					i = System.Text.Encoding.Default.GetByteCount(drow[columnName].ToString());
					if (i > length)
						length = i;
				}
				return length;
			}
			catch
			{
				return 1;
			}
		}
		private int GetColumnLength(int columnIndex)
		{
			Int32 length;
			Int32 i;
			try
			{
				length = 1;
				foreach (DataRow drow in table.Rows)
				{
					i = System.Text.Encoding.Default.GetByteCount(drow[columnIndex].ToString());
					if (i > length)
						length = i;
				}
				return length;
			}
			catch
			{
				return 1;
			}
		}
		private int GetColumnLength(DataColumn column)
		{
			Int32 length;
			Int32 i;
			try
			{
				length = 1;
				foreach (DataRow drow in table.Rows)
				{
					i = System.Text.Encoding.Default.GetByteCount(drow[column].ToString());
					if (i > length)
						length = i;
				}
				return length;
			}
			catch
			{
				return 1;
			}
		}
		/// <summary>
		/// 取得合法文件名!
		/// </summary>
		/// <param name="fileExt">指定文件扩展名</param>
		/// <returns>文件名</returns>
		private string GetFileName(string fileExt)
		{
			string file_name;

			fileExt = fileExt.ToLower().Trim();
			SaveFileDialog saveDlg = new SaveFileDialog();
			
			using(saveDlg)
			{
				switch (fileExt)
				{
					case ".xls":
						saveDlg.Filter = "Microsoft Excel 工作簿(*.xls)|*.xls";
						break;
					case ".htm":
					case ".html":
						saveDlg.Filter = "网页(*.htm;*.html)|*.htm;*.html";
						break;
					case ".txt":
						saveDlg.Filter = "文本文件(*.txt)|*.txt";
						break;
					case ".csv":
						saveDlg.Filter = "CSV(逗号分隔)(*.csv)|*.csv";
						break;
					case ".dbf":
						saveDlg.Filter = "Microsoft dBase(*.dbf)|*.dbf";
						break;
					case "":
						return "";
					
					default:
						saveDlg.Filter = "所有文件(*.*)|*.*";
						break;
				}

				file_name = Path.ChangeExtension(fileName,fileExt);

				saveDlg.FileName = file_name;

				saveDlg.CheckPathExists = false;
				saveDlg.CheckFileExists = false;
				saveDlg.OverwritePrompt = false;

				if ((file_name == "") || autoGetFileName)
				{
					if(saveDlg.ShowDialog() != DialogResult.OK) 
						return "";

					file_name = Path.ChangeExtension(saveDlg.FileName,fileExt);
				}

				if (file_name == "")
					return "";

				//判断文件是否存在!
				while (File.Exists(file_name))
				{
					switch(MessageBox.Show("文件(" + file_name + ")已经存在,是否覆盖!","警告",MessageBoxButtons.YesNoCancel ,MessageBoxIcon.Warning ))
					{
						case DialogResult.Yes:
							try
							{
								File.Delete(file_name);
							}
							catch
							{
								///不返回错误
							}
							if (! File.Exists(file_name))
								return file_name;
							else if (MessageBox.Show("移出文件失败,是否重新选择文件名?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question )== DialogResult.No)
								return "";
							break;
						case DialogResult.No:
							break;
						case DialogResult.Cancel:
							return "";
					}

					saveDlg.FileName = file_name;
					if(saveDlg.ShowDialog() != DialogResult.OK) 
						return "";
					file_name = Path.ChangeExtension(saveDlg.FileName,fileExt);
				}
				return file_name;
			}
		}

		/// <summary>
		/// 导出的字段
		/// </summary>
		private class OutField
		{
			private string field_Name;
			private Int32 field_Index;
			private Int32 field_Length;

			/// <summary>
			/// 字段名称
			/// </summary>
			public string Field_Name
			{
				get
				{
					return field_Name;
				}
				set
				{
					field_Name = value;
				}
			} 
			/// <summary>
			/// 字段Index
			/// </summary>
			public Int32 Field_Index
			{
				get
				{
					return field_Index;
				}
				set
				{
					field_Index = value;
				}
			} 
			/// <summary>
			/// 字段长度
			/// </summary>
			public Int32 Field_Length
			{
				get
				{
					return field_Length;
				}
				set
				{
					field_Length = value;
				}
			} 
		}

		private class OutFieldCollection:System.Collections.CollectionBase
		{
		
			public int Add(OutField value)
			{
				// TODO:  Add OutFieldCollection.Add implementation
				return InnerList.Add(value);
			}
		
			public bool Contains(OutField value)
			{
				// TODO:  Add OutFieldCollection.Contains implementation
				return InnerList.Contains(value);
			}
		
			public int IndexOf(OutField value)
			{
				// TODO:  Add OutFieldCollection.IndexOf implementation
				return InnerList.IndexOf(value);
			}
		
			public void Insert(int index, OutField value)
			{
				// TODO:  Add OutFieldCollection.Insert implementation
				InnerList.Insert(index,value);
			}
		
			public void Remove(OutField value)
			{
				// TODO:  Add OutFieldCollection.Remove implementation
				InnerList.Remove(value);
			}
		
			public OutField this[int index]
			{
				get
				{
					// TODO:  Add OutFieldCollection.this getter implementation
					return (OutField)InnerList[index];
				}
			}
		}
		private void OpenFile(string fileName)
		{
			if (! autoOpen)
				return;
			if (! File.Exists(fileName))
				return;
			if (MessageBox.Show("文件导出完成,现在打开文件吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
				ShellExecute(GetDesktopWindow(),"open",fileName,"",Path.GetDirectoryName(fileName),3);
		}

		private bool GetFieldList()
		{
			ListViewItem lvItem;
            OutField outField;
			
			if ((table == null) || (table.Rows.Count == 0))
				return false;

			using(SelectFieldsForm fmSelectField = new SelectFieldsForm())
			{
				fmSelectField.FieldList.Items.Clear();

				for(int i = 0; i < table.Columns.Count; i++)
				{
					///排除二进制字段!!
					if ((table.Columns[i].DataType == System.Type.GetType("System.Byte[]"))
						|| (table.Columns[i].DataType == System.Type.GetType("System.Object"))
						|| (table.Columns[i].DataType == System.Type.GetType("System.Guid")))
						continue;

					lvItem = new ListViewItem();
					lvItem.Text = table.Columns[i].Caption;
					lvItem.SubItems.Add(i.ToString());

					lvItem.Checked = true;

					fmSelectField.FieldList.Items.Add(lvItem);
				}

				if (outFields.Count > 0)
				{
					foreach(ListViewItem item1 in fmSelectField.FieldList.Items)
					{
						foreach(OutField o in outFields)
						{
							if (item1.Text == o.Field_Name)
							{
								item1.Checked = true;
								break;
							}
						}
					}
				}
				else
					foreach(ListViewItem item1 in fmSelectField.FieldList.Items)
						item1.Checked = true;
						
				if (selectField)
				{
					if (fmSelectField.ShowDialog() != DialogResult.OK)
						return false;
				}

				outFields.Clear();

				foreach(ListViewItem item1 in fmSelectField.FieldList.Items)
				{
					if (item1.Checked )
					{
						outField = new OutField();
						outField.Field_Name = item1.Text;
						outField.Field_Index = Convert.ToInt32(item1.SubItems[1].Text);
						outFields.Add(outField);
					}
				}
			}
			if (outFields.Count == 0)
				return false;
			else 
				return true;
		}

		[DllImport("user32.dll",EntryPoint="GetDesktopWindow")]
		public static extern IntPtr GetDesktopWindow();
		[DllImport("shell32.dll", EntryPoint="ShellExecuteA")]
		public static extern int ShellExecute(IntPtr hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd);
		public bool ExportToText(string separator,string fileExt)
		{
			string file_name;
			string strLine;
			DataRow drow;

			if (! ReadyToExport())
				return false;

			if (fileExt == "")
				fileExt = ".txt";

			file_name = GetFileName(fileExt);

			if (file_name == "")
				return false;

			if (! GetFieldList())
				return false;


			///判断分隔符是否合法
			separator = separator.Replace("\r","").Replace("\n","");
			if (separator == "")
				separator = "\t";

			//找开文件

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -