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

📄 datalistview.cs

📁 考试管理系统CS架构 不需更多说明
💻 CS
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace ExamSystem.Common
{
	/// <summary>
	/// DataListView 的摘要说明。
	/// </summary>
	public class DataListView : System.Windows.Forms.ListView
	{
		/// <summary> 
		/// 必需的设计器变量。
		/// </summary>
		private System.ComponentModel.Container components = null;
		//private ArrayList columnList;
		private DataTable dt;//本控件所用的DataTable
		private bool autoColumnsWidth=false;//是否自动设置列宽
		
		
		private int lastSelect=-1;
		private Color lastColor;
		
		private Color selectedColor=Color.White;

		/// <summary>
		/// 选定行的颜色
		/// </summary>
		public Color SelectedColor
		{
			get
			{
				return selectedColor;
			}
			set
			{
				selectedColor=value;
				
			}
		}

		/// <summary>
		/// 是否自动设置列宽
		/// </summary>
		public bool AutoColumnsWidth
		{
			get
			{
				return autoColumnsWidth;
			}
			set
			{
				autoColumnsWidth=value;
				if(autoColumnsWidth)
				{
					setAutoColumnsWidth();
				}
			}
		}

		private int lineNumWidth=50;//判断是否添加行号

		/// <summary>
		/// 行号的宽(0为隐藏行号)
		/// </summary>
		public int LineNumWidth
		{
			get
			{
				return lineNumWidth;
			}
			set
			{
				lineNumWidth=value;
				//this.Columns[0].Width=lineNumWidth;
				if(autoColumnsWidth)
				{
					setAutoColumnsWidth();
				}
			}
		}

		/// <summary>
		/// 自动设置列宽,如果该列的宽为0,则还是设置为0
		/// </summary>
		private void setAutoColumnsWidth()
		{
			if(this.Columns.Count<=0)
			{
				return;
			}
			if(this.Width<=0)
			{
				return;
			}
			int countWidth=this.Width-this.Columns[0].Width;//算出除了第一行以外的总宽
			ArrayList visableCols=new ArrayList();//记录显示的列
			for(int i=1;i<this.Columns.Count;i++)
			{
				if(this.Columns[i].Width>0)
				{
					visableCols.Add(this.Columns[i]);
				}
			}
			if(visableCols.Count>0)
			{
				int colWidth=(countWidth/visableCols.Count)-2;//算出每列的宽
				for(int i=0;i<visableCols.Count;i++)
				{
					ColumnHeader col=(ColumnHeader)visableCols[i];
					col.Width=colWidth;
				}
			}
		}
		

		public DataListView()
		{
			// 该调用是 Windows.Forms 窗体设计器所必需的。
			InitializeComponent();

			// TODO: 在 InitializeComponent 调用后添加任何初始化

		}
		
		/// <summary>
		/// 把DataTable的数据填进ListView
		/// </summary>
		/// <param name="dt"></param>
		private void fillList()
		{
			if(dt==null)
			{
				return;
			}
			this.Columns.Clear();//清空所有数据
			this.Items.Clear();
			
			this.Columns.Add("",lineNumWidth,HorizontalAlignment.Center);
			
			for(int i=0;i<dt.Columns.Count;i++)//添加列
			{
				this.Columns.Add(dt.Columns[i].Caption,width,HorizontalAlignment.Center);
			}
			for(int i=0;i<dt.Rows.Count;i++)
			{
				ListViewItem item=new ListViewItem((i+1).ToString());//添加一个新行,第一列是行号	
				for(int k=0;k<dt.Columns.Count;k++)
				{
					item.SubItems.Add(dt.Rows[i][k].ToString());
				}
				this.Items.Add(item);
			}
			if(autoColumnsWidth)
			{
				setAutoColumnsWidth();
			}
			lastSelect=-1;
		}
		
		private int width=100;
		public int ColumnsWidth
		{
			get
			{
				return width;
			}
			set
			{
				width=value;
			}
		}
		
		/// <summary>
		/// 绑定DataTable
		/// </summary>
		public DataTable BindTable
		{
			get
			{
				return dt;
			}
			set
			{
				this.dt=value;
				fillList();
			}
		}
		/// <summary> 
		/// 清理所有正在使用的资源。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		/// <summary>
		/// 刷新行号
		/// </summary>
		public void RefreshLineNum()
		{
			if(this.Columns[0].Text=="")
			{
				for(int i=0;i<this.Items.Count;i++)
				{
					this.Items[i].SubItems[0].Text=(i+1).ToString();
				}
			}
		}

		#region 组件设计器生成的代码
		/// <summary> 
		/// 设计器支持所需的方法 - 不要使用代码编辑器 
		/// 修改此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{
			// 
			// DataListView
			// 
			this.Name = "DataListView";
			this.SizeChanged+=new EventHandler(DataListView_SizeChanged);
			this.View=View.Details;
			this.FullRowSelect=true;
			this.MultiSelect=false;
			this.SelectedIndexChanged+=new EventHandler(DataListView_SelectedIndexChanged);
		}
		#endregion

		private void DataListView_SizeChanged(object sender, EventArgs e)
		{
			if(autoColumnsWidth)
			{
				setAutoColumnsWidth();
			}
		}

		private void DataListView_SelectedIndexChanged(object sender, EventArgs e)
		{
			if(this.SelectedIndices.Count<=0)
			{
				return;
			}
			if(this.lastSelect>=0)
			{
				this.Items[lastSelect].BackColor=lastColor;
			}
			int index=this.SelectedIndices[0];
			if(index>=0)
			{
				lastColor=this.Items[index].BackColor;
				this.Items[index].BackColor=this.selectedColor;
				lastSelect=index;
			}
		}
	}
}

⌨️ 快捷键说明

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