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