📄 datalistview.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 + -