亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? listviewex.cs

?? 圖書館信息管理系統 Library Information Management System
?? CS
字號:
using System;
using System.Windows.Forms;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Drawing.Drawing2D;
using System.Resources;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
using System.Globalization;
using System.Data ;
 
namespace Library.Class.GUI.ListViewEx
{
	#region Enumerations
	public enum SortedFormatType
	{
		String,
		Numeric,
		Date,
		Custom
	}
	public enum SortedDirection
	{
		Ascending,
		Descending
	}
	#endregion
	#region 事件處理定義...
	public delegate void ListViewExEventHandler(object sender, ListViewExEventArgs e);
	/// <summary>
	///在生成Listview 事件 需要的自定義參數。
	/// </summary>
	public class ListViewExEventArgs : EventArgs
	{
		private string mFiledName;
		private string mSubItemText;
  
		public ListViewExEventArgs(string pFieldName,string pSubItemText)
		{
			mFiledName = pFieldName;
			mSubItemText = pSubItemText;
		}
		#region Public 屬性 ...
		public string SubItemText
		{
			get
			{
				return mSubItemText;
			}
			set
			{
				mSubItemText=value;
			}
		}
		#endregion Public 屬性 ...
	}
	#endregion 事件處理定義...
	/// <summary>
	/// 繼承ListView 并增加數據綁定和排序的功能
	/// </summary>
	[ToolboxItemFilter("System.Windows.Forms")]
	[ToolboxBitmap(typeof(ListViewEx),"ListViewEx.bmp")]
	public class ListViewEx : ListView
	{
		private DataSet mDataSouce;
		private int mKeyIndex = -1 ;
		private string mKeyName = "ID";
		private SortColumnType[] mColType;
		private ListViewSortManager mSortManager;
		private int mMaxRowCount = 1000;
		#region 事件處理相關...
		private ListViewExEventHandler mBeforAddCell;
		public event ListViewExEventHandler BeforAddCell 
		{
			add 
			{ 
				mBeforAddCell += value; 
			} 
			remove 
			{ 
				mBeforAddCell -= value; 
			}
		}
		private void FireBeforAddCell(ListViewExEventArgs e)
		{
			if (mBeforAddCell!= null) 
			{
				// 調用相應的委托代理
				mBeforAddCell(this, e);
			}
		}
		#endregion 事件處理相關...
		public ListViewEx()
		{      
			FullRowSelect = true;
			View = View.Details;
			this.CheckBoxes = true; 
		}
		//綁定DataSet 
		public DataSet DataSouce
		{
			set
			{
				mDataSouce = value;
				refresh();
			}
		}
		#region 創建 ListView 的表頭和子項...
		private void refresh()
		{
			Debug.Assert(mDataSouce!=null,"顯示ListView","顯示ListView的時候不能設置一個空的DataSet!");
			createColumns() ;
			createListItem();
			//增加排序的處理
			mSortManager = new ListViewSortManager(this,mColType);
		}
		//創建 List Item 
		private void createListItem()
		{
			DataTable dt =  mDataSouce.Tables[0];
			if(this.Items.Count>0)
				this.Items.Clear();
			int colCount = dt.Columns.Count; 
			int curRowIndex = 0;
			foreach(DataRow dr in dt.Rows)
			{
				//目前設置最大值是1000,翻頁處理以后再添加
				if(curRowIndex > MaxRowCount)
					break;
				//先增加Key 值列
				int itemIndex = 0;
				if( mKeyIndex ==0)
				{
					itemIndex =1;
				}
				string cellText = dr[itemIndex].ToString();
				ListViewExEventArgs arg = new ListViewExEventArgs( dt.Columns[itemIndex].ColumnName,cellText);
				FireBeforAddCell(arg);
				ListViewItem item = new ListViewItem(arg.SubItemText,0);
				//把Table 的行存在Item 的tag 屬性中
				item.Tag = dr;
				for(int i=itemIndex ; i< mKeyIndex;i++)
				{
					cellText = dr[i].ToString();
					arg = new ListViewExEventArgs( dt.Columns[i].ColumnName,cellText);
					FireBeforAddCell(arg);
					item.SubItems.Add(arg.SubItemText);
				}
				for(int i=mKeyIndex +1;i<colCount ;i++)
				{
					cellText = dr[i].ToString();
					arg = new ListViewExEventArgs( dt.Columns[i].ColumnName,cellText);
					FireBeforAddCell(arg);
					item.SubItems.Add(arg.SubItemText);
				}
				curRowIndex ++;
				this.Items.Add(item) ; 
			}
		}
		//創建ListView的表頭
		private void createColumns()
		{
			DataTable dt =  mDataSouce.Tables[0];
			if(Columns.Count > 0)
				Columns.Clear();
			int i = 0;
			mColType = new SortColumnType[dt.Columns.Count];
			foreach(DataColumn dc in dt.Columns)
			{
				//HorizontalAlignment.Left
				//得到該Table 中是否有內置的Key Index 并得到它
				if(i!=mKeyIndex)
				{
					if(dc.ColumnName.ToUpper()  == mKeyName)
					{
						//this.Columns.Add(dc.Caption, 0,getAlignment(dc,i));
						mKeyIndex = i;
					}
					else
					{
						this.Columns.Add(dc.Caption,100,getAlignment(dc,i));
					}
				}
				i++;
			}
		}
		//得到列的文本的對齊方式
		private HorizontalAlignment getAlignment(DataColumn pDc,int pColIndex)
		{
			switch(pDc.GetType().Name)
			{
				case "String":
					mColType[pColIndex] = SortColumnType.Text ;
					return HorizontalAlignment.Left;
				case "Int16" :
				case "Int32" :
				case "Decimal":
					mColType[pColIndex] = SortColumnType.Number;
					return HorizontalAlignment.Right;
				case "DateTime" :
					mColType[pColIndex] = SortColumnType.DateTime;
					return HorizontalAlignment.Left;
				default:
					mColType[pColIndex] = SortColumnType.Text ;
					return HorizontalAlignment.Left;
			}
		}
		#endregion 創建 ListView 的表頭和子項...
		#region Public 屬性 ...
		public int KeyIndex
		{
			get
			{
				return mKeyIndex;
			}
			set
			{
				mKeyIndex = value;
			}
		}
		public string KeyName
		{
			get
			{
				return mKeyName;
			}
			set
			{
				mKeyName = value;
			}
		}
		public int MaxRowCount
		{
			get
			{
				return mMaxRowCount;
			}
			set
			{
				mMaxRowCount = value;
			}
		}
		#endregion Public 屬性 ...
	}

	#region  ListViewSortManager ...
	enum SortColumnType
	{
		Text,
		Number,
		DateTime
	}
	/// <summary>
	/// 繼承IComparer接口,提供兩個文本之間的比較方法
	/// </summary>
	class ListViewTextSort: IComparer
	{
		private SortColumnType mType;
		private Int32 mColumn;
		private Boolean mAscending;
		public  SortColumnType CompareType
		{
			set
			{
				mType = value;
			}
		}
		public ListViewTextSort(Int32 sortColumn, Boolean ascending)
		{
			mColumn = sortColumn;
			mAscending = ascending;
		}
		/// <summary>
		/// 實現IComparer.Compare
		/// </summary>
		/// <param name="lhs">比較的第一個對象</param>
		/// <param name="rhs">比較的第二個對象</param>
		/// <returns>  如果lhs 小于 rhs那么小于零,否則大于零,或者等于零</returns>
		public Int32 Compare(Object lhs, Object rhs)
		{
			ListViewItem lhsLvi = lhs as ListViewItem;
			ListViewItem rhsLvi = rhs as ListViewItem;
			if(lhsLvi == null || rhsLvi == null)   
				return 0;
			ListViewItem.ListViewSubItemCollection lhsItems = lhsLvi.SubItems;
			ListViewItem.ListViewSubItemCollection rhsItems = rhsLvi.SubItems;
			String lhsText = (lhsItems.Count > mColumn) ? lhsItems[mColumn].Text : String.Empty;
			String rhsText = (rhsItems.Count > mColumn) ? rhsItems[mColumn].Text : String.Empty;
			Int32 result = 0;
			if(lhsText.Length == 0 || rhsText.Length == 0)
				result = lhsText.CompareTo(rhsText);
			else
				result = OnCompare(lhsText, rhsText);
			if(!mAscending)
				result = -result;
			return result;
		}
		/// <summary>
		/// 覆蓋進行特別類型的比較
		/// </summary>
		/// <param name="lhs">比較的第一個對象</param>
		/// <param name="rhs">比較的第二個對象</param>
		/// <returns>  如果lhs 小于 rhs那么小于零,否則大于零,或者等于零</returns>
		protected virtual Int32 OnCompare(String lhs, String rhs)
		{
			switch(mType)
			{
				case SortColumnType.Text :
					return String.Compare(lhs, rhs, false);
				case SortColumnType.Number :
					Double result = Double.Parse(lhs) - Double.Parse(rhs);
					if(result > 0)
						return 1;
					else if(result < 0)
						return -1;
					else
						return 0;
				case SortColumnType.DateTime :
					return DateTime.Parse(lhs).CompareTo(DateTime.Parse(rhs));
				default :
					return String.Compare(lhs, rhs, false);
			}
		}
	}
	/// <summary>
	/// 和ListViewEx分離,實現列排序的管理
	/// </summary>
	class ListViewSortManager
	{
		private Int32 mColumn;
		private SortOrder mSortOrder;
		private ListViewEx mList;
		private SortColumnType[] mComparers;
		private ImageList mImgList;
		/// <param name="list">管理列排序的ListViewEx對象</param>
		/// <param name="comparers">對應每一列排序的類型</param>
		public ListViewSortManager(ListViewEx list, SortColumnType[] comparers)
		{
			mColumn = -1;
			mSortOrder = SortOrder.None;
			mList = list;
			mComparers = comparers;
			mImgList = new ImageList();
			mImgList.ImageSize = new Size(8, 8);
			mImgList.TransparentColor = System.Drawing.Color.Magenta;
			mImgList.Images.Add(GetArrowBitmap(ListSortDirection.Ascending));   
			mImgList.Images.Add(GetArrowBitmap(ListSortDirection.Descending));   
			SetHeaderImageList(mList, mImgList);
			list.ColumnClick += new ColumnClickEventHandler(ColumnClick);
		}
		/// <summary>
		/// 當前排序的列的Index
		/// </summary>
		public Int32 Column
		{
			get { return mColumn; }
		}
		/// <summary>
		/// 當前排序的方式
		/// </summary>
		public SortOrder SortOrder
		{
			get { return mSortOrder; }
		}
		/// <summary>
		/// 排序行
		/// </summary>
		public void Sort(Int32 column)
		{
			SortOrder order = SortOrder.Ascending;
   
			if(column == mColumn)
				order = (mSortOrder == SortOrder.Ascending) ? SortOrder.Descending : SortOrder.Ascending;
			Sort(column, order);
		}
		public void Sort(Int32 column, SortOrder order)
		{
			if(column < 0 || column >= mComparers.Length)
				throw new IndexOutOfRangeException();
			if(column != mColumn)
			{
				ShowHeaderIcon(mList, mColumn, SortOrder.None);
				mColumn = column;
			}
			ShowHeaderIcon(mList, mColumn, order);
			mSortOrder = order;
			if(order != SortOrder.None)
			{
				ListViewTextSort comp = new ListViewTextSort(mColumn, order == SortOrder.Ascending);//(ListViewTextSort) Activator.CreateInstance(mComparers[mColumn], new Object[] { mColumn, order == SortOrder.Ascending } );
				comp.CompareType = mComparers[mColumn]; 
				mList.ListViewItemSorter = comp;
			}
		}
		//當Click ListViewEx列標題時,得到它的事件,并進行排序的處理
		private void ColumnClick(object sender, ColumnClickEventArgs e)
		{
			this.Sort(e.Column);        
		}

		#region Graphics
		//畫向下或者向上的方向箭頭
		Bitmap GetArrowBitmap(ListSortDirection  type)
		{
			Bitmap bmp = new Bitmap(8, 8);
			Graphics gfx = Graphics.FromImage(bmp);
			Pen lightPen = SystemPens.ControlLightLight;
			Pen shadowPen = SystemPens.ControlDark;
			gfx.FillRectangle(System.Drawing.Brushes.Magenta, 0, 0, 8, 8);
			if(type == ListSortDirection.Ascending)  
			{
				gfx.DrawLine(lightPen, 0, 7, 7, 7);
				gfx.DrawLine(lightPen, 7, 7, 4, 0);
				gfx.DrawLine(shadowPen, 3, 0, 0, 7);
			}
			else if(type == ListSortDirection.Descending)
			{
				gfx.DrawLine(lightPen, 4, 7, 7, 0);
				gfx.DrawLine(shadowPen, 3, 7, 0, 0);
				gfx.DrawLine(shadowPen, 0, 0, 7, 0);
			}
   
			gfx.Dispose();
			return bmp;
		}
		#region WIndows32 API...
		[StructLayout(LayoutKind.Sequential)]
			private struct HDITEM 
		{
			public Int32     mask; 
			public Int32     cxy;  
			[MarshalAs(UnmanagedType.LPTStr)] 
			public String    pszText; 
			public IntPtr  hbm; 
			public Int32     cchTextMax; 
			public Int32     fmt; 
			public Int32     lParam; 
			public Int32     iImage;
			public Int32     iOrder;
		};
		[DllImport("user32")]
		static extern IntPtr SendMessage(IntPtr Handle, Int32 msg, IntPtr wParam, IntPtr lParam);
		[DllImport("user32", EntryPoint="SendMessage")]
		static extern IntPtr SendMessage2(IntPtr Handle, Int32 msg, IntPtr wParam, ref HDITEM lParam);
		const Int32 HDI_WIDTH   = 0x0001;
		const Int32 HDI_HEIGHT   = HDI_WIDTH;
		const Int32 HDI_TEXT   = 0x0002;
		const Int32 HDI_FORMAT   = 0x0004;
		const Int32 HDI_LPARAM   = 0x0008;
		const Int32 HDI_BITMAP   = 0x0010;
		const Int32 HDI_IMAGE   = 0x0020;
		const Int32 HDI_DI_SETITEM  = 0x0040;
		const Int32 HDI_ORDER   = 0x0080;
		const Int32 HDI_FILTER   = 0x0100;  // 0x0500
		const Int32 HDF_LEFT   = 0x0000;
		const Int32 HDF_RIGHT   = 0x0001;
		const Int32 HDF_CENTER   = 0x0002;
		const Int32 HDF_JUSTIFYMASK  = 0x0003;
		const Int32 HDF_RTLREADING  = 0x0004;
		const Int32 HDF_OWNERDRAW  = 0x8000;
		const Int32 HDF_STRING   = 0x4000;
		const Int32 HDF_BITMAP   = 0x2000;
		const Int32 HDF_BITMAP_ON_RIGHT = 0x1000;
		const Int32 HDF_IMAGE   = 0x0800;
		const Int32 HDF_SORTUP   = 0x0400;  // 0x0501
		const Int32 HDF_SORTDOWN  = 0x0200;  // 0x0501
		const Int32 LVM_FIRST           = 0x1000;  // List 消息
		const Int32 LVM_GETHEADER  = LVM_FIRST + 31;
		const Int32 HDM_FIRST           = 0x1200;  // Header 消息
		const Int32 HDM_SETIMAGELIST = HDM_FIRST + 8;
		const Int32 HDM_GETIMAGELIST    = HDM_FIRST + 9;
		const Int32 HDM_GETITEM   = HDM_FIRST + 11;
		const Int32 HDM_SETITEM   = HDM_FIRST + 12;
		#endregion WIndows32 API...
		//顯示Header的圖標
		private void ShowHeaderIcon(ListView list, int columnIndex, SortOrder sortOrder)
		{
			if(columnIndex < 0 || columnIndex >= list.Columns.Count)
				return;
			IntPtr hHeader = SendMessage(list.Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero);
			ColumnHeader colHdr = list.Columns[columnIndex];
			HDITEM hd = new HDITEM();
			hd.mask = HDI_IMAGE | HDI_FORMAT;
			HorizontalAlignment align = colHdr.TextAlign;
			if(align == HorizontalAlignment.Left)
				hd.fmt = HDF_LEFT | HDF_STRING | HDF_BITMAP_ON_RIGHT;
			else if(align == HorizontalAlignment.Center)
				hd.fmt = HDF_CENTER | HDF_STRING | HDF_BITMAP_ON_RIGHT;
			else // HorizontalAlignment.Right
				hd.fmt = HDF_RIGHT | HDF_STRING;
			if(sortOrder != SortOrder.None)
				hd.fmt |= HDF_IMAGE;
			hd.iImage = (int) sortOrder - 1;
			SendMessage2(hHeader, HDM_SETITEM, new IntPtr(columnIndex), ref hd);
		}
		private void SetHeaderImageList(ListView list, ImageList imgList)
		{
			IntPtr hHeader = SendMessage(list.Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero);
			SendMessage(hHeader, HDM_SETIMAGELIST, IntPtr.Zero, imgList.Handle);
		}
		#endregion Graphics
	}
	#endregion  ListViewSortManager ...
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人综合天天影院| 国产精品美女视频| 中文乱码免费一区二区| 亚洲国产精品欧美一二99| 国模一区二区三区白浆| 欧美主播一区二区三区| 久久久777精品电影网影网| 日韩精彩视频在线观看| 91黄色免费观看| 国产精品免费视频观看| 国产一区二区三区精品视频| 欧美高清视频www夜色资源网| 中文字幕不卡的av| 国产很黄免费观看久久| 日韩欧美国产精品| 午夜激情一区二区三区| 欧洲一区二区av| 亚洲日本丝袜连裤袜办公室| 国产美女在线观看一区| 精品久久一区二区| 免费成人av资源网| 日韩欧美在线影院| 美女网站色91| 欧美一级精品在线| 久久精品国产亚洲a| 欧美一级在线免费| 人人爽香蕉精品| 欧美一区二区不卡视频| 日本va欧美va瓶| 欧美成人精品高清在线播放| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩高清一区二区三区| 亚洲综合视频网| 欧美区在线观看| 日韩精品免费视频人成| 日韩你懂的在线播放| 麻豆国产91在线播放| 日韩视频一区二区| 精彩视频一区二区三区| 久久精品综合网| 成人h动漫精品一区二| 国产精品超碰97尤物18| 99精品视频在线观看| 亚洲欧美福利一区二区| 在线观看一区二区视频| 午夜久久久影院| 精品国产电影一区二区| 国产东北露脸精品视频| 中文字幕一区二区不卡| 在线免费观看日本欧美| 天天操天天干天天综合网| 日韩欧美国产一区在线观看| 国产麻豆视频一区| 日韩美女啊v在线免费观看| 欧美在线视频不卡| 精品亚洲aⅴ乱码一区二区三区| 久久精品视频免费观看| 一本一本大道香蕉久在线精品| 亚洲国产另类av| 久久伊99综合婷婷久久伊| www.色精品| 日韩avvvv在线播放| 国产欧美日韩另类一区| 91久久线看在观草草青青| 日本亚洲天堂网| 国产精品国产三级国产有无不卡 | 国产一区二区久久| 国产精品久久久久久一区二区三区 | 日韩午夜在线播放| 成人午夜在线免费| 亚洲第一成人在线| 久久久亚洲欧洲日产国码αv| 91女厕偷拍女厕偷拍高清| 奇米影视一区二区三区| 国产精品理论在线观看| 日韩午夜电影av| 91免费版在线| 精品亚洲国内自在自线福利| 亚洲综合在线视频| 国产欧美一区二区在线| 777午夜精品视频在线播放| av电影在线观看一区| 蜜桃av一区二区三区电影| 亚洲色图视频网站| 久久久精品免费观看| 欧美精品日韩精品| 91啦中文在线观看| 国产成人免费网站| 久久国产精品99久久久久久老狼| 亚洲女人小视频在线观看| 久久综合狠狠综合久久激情| 欧美在线不卡一区| 91色.com| 91无套直看片红桃| 成人网在线免费视频| 久久99国产精品久久| 日韩av中文字幕一区二区三区| 综合久久给合久久狠狠狠97色| 久久午夜电影网| 日韩欧美一级精品久久| 欧美情侣在线播放| 欧美肥妇毛茸茸| 欧美日韩情趣电影| 91久久人澡人人添人人爽欧美| av电影天堂一区二区在线观看| 国模套图日韩精品一区二区| 老司机精品视频线观看86| 免费观看在线综合色| 日本色综合中文字幕| 日本不卡一二三区黄网| 日本va欧美va欧美va精品| 日韩激情中文字幕| 日本中文字幕一区二区视频 | 欧美日韩一区二区三区四区| 91免费看片在线观看| 91美女片黄在线观看| 成人深夜在线观看| av在线这里只有精品| 99国产欧美久久久精品| 色综合久久综合网| 在线视频综合导航| 欧美日韩国产高清一区| 91精选在线观看| 日韩精品一区二区三区蜜臀| 精品欧美一区二区久久| 日韩三级视频在线看| 精品国产乱子伦一区| 久久久久久一级片| 综合网在线视频| 一区二区三区四区激情| 午夜精品爽啪视频| 久久99精品久久久久| 国产v综合v亚洲欧| 色综合久久综合网欧美综合网| 欧美日韩在线精品一区二区三区激情 | 91天堂素人约啪| 欧美视频你懂的| 日韩精品专区在线影院观看| 国产欧美精品一区二区色综合朱莉 | 国产99久久久精品| 色88888久久久久久影院野外| 欧美视频精品在线观看| 日韩视频一区二区三区 | 久久久99精品久久| 亚洲啪啪综合av一区二区三区| 亚洲亚洲精品在线观看| 日韩av中文字幕一区二区三区| 国产精品性做久久久久久| 91亚洲男人天堂| 日韩丝袜美女视频| 国产精品萝li| 免费观看日韩av| 99久久er热在这里只有精品66| 欧美日高清视频| 中文成人av在线| 日韩影视精彩在线| 99视频有精品| 91精品国产麻豆| 亚洲欧美另类久久久精品2019| 麻豆一区二区三| 91在线观看美女| 精品理论电影在线观看| 亚洲小说春色综合另类电影| 国产精品亚洲综合一区在线观看| 欧美特级限制片免费在线观看| 国产日韩欧美电影| 日本伊人午夜精品| 色综合久久88色综合天天 | 亚洲男人天堂av| 极品少妇一区二区| 欧美午夜不卡在线观看免费| 中文乱码免费一区二区| 久久99国产精品免费| 欧美美女直播网站| 亚洲视频免费看| 国产麻豆日韩欧美久久| 日韩欧美国产不卡| 日韩一区精品字幕| 91成人在线观看喷潮| 国产欧美一区二区精品仙草咪 | 欧美变态口味重另类| 亚洲综合一区在线| 91在线观看成人| 国产精品美女视频| 国产成人一级电影| 久久亚洲精品小早川怜子| 免费成人结看片| 91精品国模一区二区三区| 亚洲高清免费观看高清完整版在线观看| zzijzzij亚洲日本少妇熟睡| 国产亚洲综合性久久久影院| 久久精品999| 日韩三级高清在线| 精品制服美女久久| 日韩欧美国产1| 国内精品写真在线观看| 欧美成人综合网站| 激情文学综合网| 久久久久久久久久久电影| 国产激情一区二区三区四区|