C# DataGridView控件使用方法
前言
DataGridView又叫做网格数据控件,用于显示表格数据、数据库数据等,它就像Excel表格一样。下面将在VS2019的环境下通过实例来实现DataGridView控件的一系列功能,例如:添加数据、切换数据、复制数据、读取数据、查询记录、删除数据、清除数据等。
程序界面
<1>新建了一个Form窗体,左上角的控件是DataGridView,添加文本框textBox与下拉菜单comBox来输入姓名、性别和班级;
<2>富文本框用来输出部分功能的输出使用;

初始化DataGridView与常规设置
初始化设置方法
<1> 通过图形化界面维护数据列信息,选择添加列即可维护,绑定数据源不在本文章中体现,如图:


<2> 通过 dataGridView.Columns.Add(new datagridview列类型对象)进行列的添加,例如:
//新建复选框列
dataGridView1.Columns.Add(new DataGridViewCheckBoxColumn());
//复选框列等同于我们的CheckBox控件,我们可以在该列内进行勾选和取消勾选操作。
//给DataGridViewCheckBoxCell对象赋值为true(勾选)和false(取消勾选)
((DataGridViewCheckBoxCell)this.dataGridView1.Rows[0].Cells[1]).Value = true;
//判断是否被勾选,isOK == "true"勾选 isOK == "false"不勾选
string isOK = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString();
//新近下拉列表列
dataGridView1.Columns.Add(new DataGridViewComboBoxColumn());
//下拉框列中,我们可以手动或者代码添加多个下拉的Item。这里,我们应该关心的是怎么添加和删除Item、
//怎么获取或者设置选中的Item对象。
//如果需要实现ComboBox的SelectChange事件,我们可以使用datagridview_CellValueChanged()来进行实现。
//添加下拉Item对象
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Items.Add("Item1");
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Items.Add("Item2");
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Items.Add("Item3");
//按照Item的text来删除下拉对象
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Items.Remove("Item2");
//按照Item集合下标删除下拉对象
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Items.RemoveAt(1);
//给ComboBox赋予默认值,通过指定Item集合下标赋值
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Value = ""+
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Items[1];
//可以直接给ComboBox单元格赋予值,该值必须为下拉框中包含的对象
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Value = "Item1";
//赋值时,赋值对象不包含在下拉框集合中,会提示异常
((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Value = "hhh";//异常
//获取ComboBOX单元格选中的值
string item = ((DataGridViewComboBoxCell)this.dataGridView1.Rows[0].Cells[2]).Value.ToString();
//新建文本框列
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
//新建DataGridView列时的默认对象,常用于展示一系列字符串对象。
//方式一:
this.dataGridView1.Rows[0].Cells[5].Value = "字符串值";
//方式二:
this.dataGridView1[5,0].Value = "字符串值";
//新建超链接列
dataGridView1.Columns.Add(new DataGridViewLinkColumn());
//链接列下cell.value可为网址对象,类似于Office中的超链接。
//但如果不用于超链接功能,也能实现类似于不可点击修改的Textcell功能。
//给cell对象赋值网址
this.dataGridView1.Rows[0].Cells[4].Value = "http://blog.lifeiai.com:88";
//使用"iexplore.exe"调用网址
System.Diagnostics.Process.Start("iexplore.exe",this.dataGridView1.Rows[0].Cells[4].Value.ToString());
//新建按钮列
dataGridView1.Columns.Add(new DataGridViewButtonColumn());
//按钮列就等同于我们的button控件,button控件能完成的,它都能完成。比如button的Click事件,
//我们可以通过datagridview1_CellClick()来判断和完成。
//新建图片列
dataGridView1.Columns.Add(new DataGridViewImageColumn());
//图片列对象用于存储图片对象,但由于控件限制,我们添加分辨率太高的图片就会显示为X,
//所以为了美观,我们要设置缩略图模式。
//给ImageCell对象赋予图片的值,可以与imageList1控件关联
this.dataGridView1.Rows[0].Cells[3].Value = imageList1.Images[0];
//设置缩略图模式
this.dataGridView1.Rows[0].Cells[3]).ImageLayout = DataGridViewImageCellLayout.Zoom;DataGridView通用全局设置
常见属性,如下:
//根据Header和所有单元格的内容自动调整行的高度
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
//设置内容对齐方式和字体
dataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Font = new Font("宋体", 10);
//设置所有单元格都不可编辑
dataGridView1.ReadOnly = true;
//设置标题头列宽
dataGridView1.RowHeadersWidth = 15;
//不可以增加空行
dataGridView1.AllowUserToAddRows = false;示例代码:
//循环添加文本框列 4列
for (int i = 0; i < 4; i++)
{
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
}
//指定标题列宽
dataGridView1.Columns[0].Width = 60;
dataGridView1.Columns[1].Width = 100;
dataGridView1.Columns[2].Width = 80;
dataGridView1.Columns[3].Width = 150;
//添加标题字符
dataGridView1.Columns[0].HeaderText = "序号";
dataGridView1.Columns[1].HeaderText = "姓名";
dataGridView1.Columns[2].HeaderText = "性别";
dataGridView1.Columns[3].HeaderText = "班级";以上代码只是简单的设置了对应显示的列,以下是常见的属性设置:
//设置指定行的列标题名 dataGridView1.Columns[0].HeaderText = "列名"; //设置指定列的列名 dataGridView1.Columns[0].Name = "id"; //设置指定列的排序,从0开始 dataGridView1.Columns[0].DisplayIndex = 3; //设置指定列的宽度 dataGridView1.Columns[0].Width = 80; //设置列的访问属性,true 不可编辑,false 可编辑 dataGridView1.Columns[0].ReadOnly = false; //根据复选框设定可不可修改 if(checkBox_Modify.Checked == true) dataGridView1.ReadOnly = false; else dataGridView1.ReadOnly = true; //设置列宽自适应 dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
DataGridView基本操作
DataGridView插入数据
使用如下方式可实现数据的插入dataGridView1.Rows[0].Cells[1].Value = textBox1.Text;

//排除异常输入,有控制则不处理
if (textBox1.Text == string.Empty || textBox2.Text == string.Empty || comboBox1.Text == string.Empty)
{
return;
}
//向第一行插入一行数据
this.dataGridView1.Rows.Insert(0, 1);
//得到总行数dataGridView1,总行数
int num = dataGridView1.Rows.Count;
//写所有行第一列数据//插入显示序号
//该方法并不适合实际情况,改善
for (int i = 0; i < num + 1; i++)
{
this.dataGridView1.Rows[i].Cells[0].Value = i + 1;
}
//写第一行第二列数据//插入名字
this.dataGridView1.Rows[0].Cells[1].Value = textBox1.Text;
//写第一行第三列数据//插入性别
this.dataGridView1.Rows[0].Cells[2].Value = comboBox1.Text;
//写第一行第四列数据//插入班级
this.dataGridView1.Rows[0].Cells[3].Value = textBox2.Text;
//去除选择
dataGridView1.ClearSelection();复制DataGridView被选择数据或全部(格式化)

//排除异常 if (dataGridView1.CurrentCell == null) return; //单元格格式化内容复制到剪切板 //Clipboard.SetDataObject()将指定值放在剪切板 //dataGridView1.GetClipboardContent() 格式化输出选择信息 Clipboard.SetDataObject(dataGridView1.GetClipboardContent()); //Clipboard.GetText() 获取剪切板信息 richTextBox1.Text = Clipboard.GetText();
如果需要复制所有行,仅需要在上述语句第一行添加如下语句即可;(上述排除异常语句可去除)
//选择所有行数据 dataGridView1.SelectAll();
删除DataGridView选中行数据(单行)

if (dataGridView1.CurrentCell == null) return; //获取选择单元格的行序号 int RowIndex = dataGridView1.CurrentCell.RowIndex; //移除指定行序号的行 this.dataGridView1.Rows.RemoveAt(RowIndex);
或者
if (dataGridView1.CurrentCell == null) return; //获取选择行的行序号 int RowIndex = dataGridView1.CurrentRow.Index; //移除指定行序号的行 this.dataGridView1.Rows.RemoveAt(RowIndex);
读取一行数据
该方法是通过获取选择的行,然后遍历组合行列单元信息,然后赋予richTextBox1

//判断是否选中一行
if (dataGridView1.SelectedRows.Count == 0)
return;
//获取选择的索引
int index = dataGridView1.CurrentRow.Index;
string line = "";
//遍历选择行列的值,组合字符串
for (int i = 1; i < dataGridView1.ColumnCount; i++)
{
line += dataGridView1.Rows[index].Cells[i].Value.ToString();
if (i == dataGridView1.ColumnCount - 1)
line += "\n";
}
//显示在richTextBox1中
richTextBox1.Text = line;读取所有行数据
避免行数据混乱,遍历行数据总数为获取行-1

string all_data = "";
//获取的行数实际会有一行空行,要去除
for (int i = 0; i < dataGridView1.Rows.Count-1; i++)//行循环
{
//遍历所有列
for (int j = 0; j < dataGridView1.ColumnCount; j++) //列循环
{
all_data += dataGridView1.Rows[i].Cells[j].Value.ToString();
if (j == dataGridView1.ColumnCount - 1)
all_data += "\n";
else
all_data += "\t";
}
}
//显示在富文本中
richTextBox1.Text = all_data;查询数据(按姓名)

int position = 0;
//获取行数
int Count = dataGridView1.Rows.Count;
//得到的要搜索的内容
string find_name = textBox1.Text;
//循环搜读对比
for (int i = position; i < Count; i++)
{
if (find_name == dataGridView1.Rows[i].Cells[1].Value.ToString())//对比
{
//选择指定单元格
dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[1];
//返回
return;
}
}清除所有数据
dataGridView1.Rows.Clear();
删除所有列
//删除包括标题在内的所有列 dataGridView1.Columns.Clear();
选择某个单元格
dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[1];
选中指定行
dataGridView1.Rows[i].Selected = true;
取消选中行
dataGridView1.Rows[i].Selected = false;
遍历所有选中的行
该方法可以用来获取只选中一行的索引获取
for (int i = 0; i < this.dataGridView1.SelectedRows.Count; i++)//遍历所有选中的行
{
ii = this.dataGridView1.SelectedRows[i].Index;
}滚动到选中行
this.dataGridView1.CurrentCell = this.dataGridView1.Rows[i].Cells[0];
本文章涉及的源码:
DataGridView.zip

