一、简单数据添加、设定单元格数据类型,若设置为数字,排序按照数值大小排序,否则是按照字符串排序
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace HelpTool
{
/// <summary>
/// 数据按表格显示出来
/// </summary>
public partial class FrmShowDataGridView : Form
{
List<string[]> strDataItem_m = new List<string[]>();
List<double[]> dbDataItem_m = new List<double[]>();
string[] titleColumn_m;
bool cellDataIsString_m = true;//单元格的数据是字符串
uint decimalPlace_m = 2;//单元格的数据是double时,保留的小数位数
/// <summary>
/// 数据按表格显示出来
/// </summary>
/// <param name="dataItem">显示的数据项,单个数据项数据与标题一一对应</param>
/// <param name="titleColumn">数据标题,长度与单个数据项一致</param>
/// <param name="showText">显示标题</param>
public FrmShowDataGridView(List<string[]> dataItem, string[] titleColumn, string showText = "数据显示")
{
InitializeComponent();
strDataItem_m = dataItem;
titleColumn_m = titleColumn;
linkLabel1.Text = showText;
cellDataIsString_m = true;
}
/// <summary>
/// 数据按表格显示出来
/// </summary>
/// <param name="dataItem">显示的数据项,单个数据项数据与标题一一对应</param>
/// <param name="titleColumn">数据标题,长度与单个数据项一致</param>
/// <param name="showText">显示标题</param>
/// <param name="decimalPlace">保留小数位数</param>
public FrmShowDataGridView(List<double[]> dataItem, string[] titleColumn, uint decimalPlace = 2, string showText = "数据显示")
{
InitializeComponent();
cellDataIsString_m = false;
dbDataItem_m = dataItem;
titleColumn_m = titleColumn;
linkLabel1.Text = showText;
decimalPlace_m = decimalPlace;
}
private void FrmShowDataGridView_Load(object sender, EventArgs e)
{
dataGridView1.Columns.Clear();
dataGridView1.Rows.Clear();
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.AllowUserToAddRows = false;//不显示新行
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.ColumnHeadersVisible = true;//行标题显示
dataGridView1.RowHeadersVisible = true;//行标题显示
try
{
for (int i = 0; i < titleColumn_m.Length; i++)
{
dataGridView1.Columns.Add("Column" + i, titleColumn_m[i]);
dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.Automatic;
dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
if(!cellDataIsString_m)
{
//设置单元列是数字类型,这样排序的时候就会按照数值大小排序,否则是按照字符串排序
//数据格式:N=double,F=float,D=int , B=二进制 ,X=十六进制 , C=带货币符号 , P=百分数
dataGridView1.Columns[i].DefaultCellStyle.Format = "N"+ decimalPlace_m;//保存几位小数
}
}
int row = 0;
if(cellDataIsString_m)
{
foreach (string[] item in strDataItem_m)
{
if (item.Length == titleColumn_m.Length)
{
int cell = 0;
dataGridView1.Rows.Add();
foreach (string str in item)
{
dataGridView1.Rows[row].Cells[cell++].Value = str;//++ 先使用,再自加1
}
row++;
}
}
}
else
{
foreach (double[] item in dbDataItem_m)
{
if (item.Length == titleColumn_m.Length)
{
int cell = 0;
dataGridView1.Rows.Add();
foreach (double db in item)
{
dataGridView1.Rows[row].Cells[cell++].Value = db;//++ 先使用,再自加1
}
row++;
}
}
}
}
catch (Exception ex)
{
}
}
}
}
二、设定单元格类型,通过DataGridView属性界面,在Columns集合添加需要的列,并把列ColumnType属性设置成想要的类型(button、textBox、checkBox、comboBox)
三、更改单元格背景色:dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Green
如果单元格类型是button,则需要按以下代码设置
DataGridViewButtonCell dg_btn_cell = new DataGridViewButtonCell();
dg_btn_cell.FlatStyle = FlatStyle.Flat;//button外观样式改为 FlatStyle.Flat,即可更改背景色;
dg_btn_cell.Style.BackColor = Color.LightGray;
dg_btn_cell.Value = "OFF";
dg_btn_cell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Rows[0].Cells[2] = dg_btn_cell;
四、限制单元格只能输入数字
private void Form1_Load(object sender, EventArgs e)
{
if (dataGridView1.Rows.Count <= 0)
{
dataGridView1.Rows.Add();
}
dataGridView1.BeginEdit(true);//最少要有一行,否则会报错
dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(this.dgv_EditingControlShowing);
}
/// <summary>
/// 单元格编辑事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.CellStyle.BackColor = Color.Aquamarine;
cellEdit_m = (DataGridViewTextBoxEditingControl)e.Control;
cellEdit_m.SelectAll();
cellEdit_m.KeyPress -= Cells_KeyPress; //绑定事件
if (sender is DataGridView)
{
DataGridView gridView = (DataGridView)sender;
if (gridView.CurrentCell.ColumnIndex > 1)
{
cellEdit_m.KeyPress += Cells_KeyPress; //绑定事件
}
}
}
/// <summary>
/// 单元格键盘按下事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Cells_KeyPress(object sender, KeyPressEventArgs e) //自定义事件
{
//设定只接收对应按键;此处只能输入数字、删除
if (!(e.KeyChar >= '0' && e.KeyChar <= '9') && e.KeyChar != '\b')
{
e.Handled = true;
}
}
五、单元格类型是button按钮单击事件绑定在单元格单击事件中CellClick
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < 0)
return;
int rowIndex = e.RowIndex;
int colIndex = e.ColumnIndex;
if (colIndex < 8)//前面8列不是button
{
return;
}
switch (colIndex)
{
case 9:
//编写button按下后对应的功能,比如轴连续运动
break;
case 10:
//编写button按下后对应的功能,比如轴相对运动
break;
case 11:
//编写button按下后对应的功能,比如轴绝对运动
break;
case 12:
//编写button按下后对应的功能,比如轴回原运动
break;
case 13:
//编写button按下后对应的功能,比如轴停止运动
break;
case 14:
//编写button按下后对应的功能,比如轴使能
break;
}
}