当前位置:首页 > 技能相关 > C#与C++ > 正文内容

C# DataGridView控件使用方法

admin2年前 (2022-12-16)C#与C++8880 修订时间:2023-03-02 22:18:09

前言

DataGridView又叫做网格数据控件,用于显示表格数据、数据库数据等,它就像Excel表格一样。下面将在VS2019的环境下通过实例来实现DataGridView控件的一系列功能,例如:添加数据、切换数据、复制数据、读取数据、查询记录、删除数据、清除数据等。

程序界面

<1>新建了一个Form窗体,左上角的控件是DataGridView,添加文本框textBox与下拉菜单comBox来输入姓名、性别和班级;

<2>富文本框用来输出部分功能的输出使用;

image.png

初始化DataGridView与常规设置

初始化设置方法

<1> 通过图形化界面维护数据列信息,选择添加列即可维护,绑定数据源不在本文章中体现,如图:

image.png

image.png

<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;

image.png

//排除异常输入,有控制则不处理
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被选择数据或全部(格式化)

image.png

//排除异常
if (dataGridView1.CurrentCell == null)
  return;
  
//单元格格式化内容复制到剪切板
//Clipboard.SetDataObject()将指定值放在剪切板
//dataGridView1.GetClipboardContent() 格式化输出选择信息
Clipboard.SetDataObject(dataGridView1.GetClipboardContent());

//Clipboard.GetText() 获取剪切板信息
richTextBox1.Text = Clipboard.GetText();

如果需要复制所有行,仅需要在上述语句第一行添加如下语句即可;(上述排除异常语句可去除)

//选择所有行数据
dataGridView1.SelectAll();

删除DataGridView选中行数据(单行)

image.png

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

image.png

//判断是否选中一行
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

image.png

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;

查询数据(按姓名)

image.png

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

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=265

分享给朋友:

相关文章

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。