引言
DataGridView我把他叫做网格数据控件 。我们在显示表格数据的时候,经常会用想到用它, 他就像Excel表格一样。我们知道只要是数据表,就一定逃不掉表的增删查改操作。
该篇,我在VS2019的环境下通过demo实例来实现DataGridView控件的一系列功能,包括添加一行数据、切换允许修改单元格、复制选择数据、复制所有数据、读一行数据、读取所有数据、查找记录、删除一行数据、删除一行数据、删除多行数据、清除所有行以及清除所有列。
一、界面简介
我新建了一个Form窗体。左上角最大的控件就是DataGridView,将demo功能定义到按键的单击事件中,另外添加了 一个文本框textBox和两个下拉菜单comBox来输入姓名、性别和班级。富文本框用来输出部分功能的输出使用。请见下图。
二、初始化
初始化包括参数初始化和表头初始化。
(1)参数初始化可以使用代码修改,也可以通过属性栏修改默认值,属性比较多,可以自己去尝试,下面我只举几个用代码控制的例子。
(2)表头初始化的目的是添加列,没有列是无法添加对应的行数据的,我们可以不用规定列的宽度和表头内容,但是必须定义列数量,dataGridView.Columns.Add(new DataGridViewTextBoxColumn())就只实现这个功能的。如实例中,我们就添加了4个列。
private void InitDataGridView ()
{
//根据Header和所有单元格的内容自动调整行的高度
dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
//设置内容对齐方式和字体
dataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
//dataGridView_Report.Font = new Font("宋体", 10);
//设置所有单元格都不可编辑
dataGridView.ReadOnly = true;
//设置标题头列宽
dataGridView.RowHeadersWidth = 15;
//不可以增加空行
dataGridView.AllowUserToAddRows = false;
//添加表头
for (int i = 0; i < 4; i++)
{
dataGridView.Columns.Add(new DataGridViewTextBoxColumn());
}
//指定标题列宽
dataGridView.Columns[0].Width = 60;
dataGridView.Columns[1].Width = 100;
dataGridView.Columns[2].Width = 80;
dataGridView.Columns[3].Width = 150;
//添加标题字符
dataGridView.Columns[0].HeaderText = "序号";
dataGridView.Columns[1].HeaderText = "姓名";
dataGridView.Columns[2].HeaderText = "性别";
dataGridView.Columns[3].HeaderText = "班级";
}
三、添加一行数据
添加一行数据,首先,要明确你要在表格的哪个位置添加几行数据,否则,无法知道往什么位置insert多少个数据。其次,必须清楚每一列的数据类型,一一对应才可以写对数据。另外,ClearSelection()方法可以去除默认的选择,防止始终有选择的焦点在控件上,可以让界面清静一点。
private void button_add_Click(object sender, EventArgs e)
{
//排除异常输入
if(textBox_Name.Text == string.Empty || comboBox_Sex.Text ==string.Empty|| comboBox_Class.Text == string.Empty)
{
return;
}
//得到总行数
int num = dataGridView.Rows.Count;
//向第一行插入一行数据
this.dataGridView.Rows.Insert(0, 1);
//写第一行第二列数据//插入名字
this.dataGridView.Rows[0].Cells[1].Value = textBox_Name.Text;
//写第一行第三列数据//插入性别
this.dataGridView.Rows[0].Cells[2].Value = comboBox_Sex.Text;
//写第一行第四列数据//插入班级
this.dataGridView.Rows[0].Cells[3].Value = comboBox_Class.Text;
//写第所有行第一列数据//插入显示序号
for (int i = 0; i < num + 1; i++)
{
this.dataGridView.Rows[i].Cells[0].Value = i + 1;
}
//去除选择
dataGridView.ClearSelection();
}
四、允许修改表格
允许修改表格是由属性ReadOnly决定的。因此,非常容易改变和修改。实例中用CheckBox的改变事件来控制属性的true 或false。
private void checkBox_Modify_CheckedChanged(object sender, EventArgs e)
{
if(checkBox_Modify.Checked == true)
dataGridView.ReadOnly = false;
else
dataGridView.ReadOnly = true;
}
五、复制选择的数据
DataGridView控件是可以允许选择一个单元格或者多个单元格,跨行的单元格,我们通过
选择后,背景色将变成默认的蓝色。我们注意要先排除没有被选择的情况。这里的Clipboard.SetDataObject()方法,和Ctrl+C的功能是一样的。我们就可以利用这个省去用户键盘操作。
private void button_Copy_Click(object sender, EventArgs e)
{
//排除异常
if (dataGridView.CurrentCell == null)
return;
//单元格格式化内容复制到粘贴板
Clipboard.SetDataObject(dataGridView.GetClipboardContent());
}
六、复制所有数据
复制所有数据和复制指定数据一样,只是我们可以将控件的所有数据自动全选上。再直接拷贝到粘贴板。简直不要太简单。
private void button_SelectAll_Click(object sender, EventArgs e)
{
dataGridView.SelectAll();
//单元格格式化内容复制到粘贴板
Clipboard.SetDataObject(dataGridView.GetClipboardContent());
}
七、读一行数据
读一行数据,前提条件是需要首先选择好一行数据的,点击每行的最左边就可以选择整行数据的,否者我们就不执行后面的操作。
获取选择的索引后将数据按照整列的数据逐一拷贝到数组中,最后显示。当然也可以不使用逐一读取,通过数据复制的方法将数据格式化数据送到粘贴板后再进行操作。
如果选择了多行,甚至是跨行多行,索引Index则是指向最后一个行,所以,代码将复制最后的那一行。
private void button_Read_Click(object sender, EventArgs e)
{
//判断是否选中一行
if (dataGridView.SelectedRows.Count == 0)
return;
//获取选择的索引
int index = dataGridView.CurrentRow.Index;
string line = "";
for (int i = 1; i < dataGridView.ColumnCount; i++)
{
line += dataGridView.Rows[index].Cells[i].Value.ToString();
if (i == dataGridView.ColumnCount - 1)
line += "\n";
}
//显示在富文本中
display_in_richTextBox(line);
}
八、读所有数据
读取所有数据和复制所有数据有点类似,这里直接使用两个for循环将每个单元格的数据格式化输出连接到字符串中。
private void button_ReadAll_Click(object sender, EventArgs e)
{
string all_data = "";
for(int i = 0; i < dataGridView.Rows.Count; i++)//行循环
{
for (int j = 0; j < dataGridView.ColumnCount; j++) //列循环
{
all_data += dataGridView.Rows[i].Cells[j].Value.ToString();
if (j == dataGridView.ColumnCount - 1)
all_data += "\n";
else
all_data += "\t";
}
}
//显示数据
display_in_richTextBox(all_data);
}
九、查找名字记录
查找某个列的记录中是否有对应的数据存在,这里我按照顺序的方法直接找到对应数据,并将焦点跳到搜索到的位置。查找的算法方法很多,还可以多次查找,模糊查找、这里只是为了说明控件实现,就不使用其它方法来复杂代码了。
//位置定义
int position = 0;
private void button_Search_Click(object sender, EventArgs e)
{
//获取行数
int Count = dataGridView.Rows.Count;
//得到的要搜索的内容
string find_name = textBox_Name.Text;
//循环搜读对比
for (int i = position; i < Count; i++)
{
if (find_name == dataGridView.Rows[i].Cells[1].Value.ToString())//对比
{
//选择指定单元格
dataGridView.CurrentCell = dataGridView.Rows[i].Cells[1];
//返回
return;
}
}
//没有找到
}
十、删除一行数据
删除一行数据同样是需要先规定是选中了至少有1行以上,删除行才有意义。
如果选择了多行,甚至是跨行多行,索引Index则是指向最后一个行,因此这种情况,代码将删除最后的那一行。
private void button_Delete_Click(object sender, EventArgs e)
{
//判断是否选中一行
if (dataGridView.SelectedRows.Count == 0)
return;
//删除一行
dataGridView.Rows.RemoveAt(dataGridView.CurrentRow.Index);
}
十一、删除多行数据
SelectedRows是获取用户选定的行的集合。通过选择集合的循环,可以逐个删除(remove)掉对应的所有行(row)。感觉这个方法还是非常快捷的。
private void button_DeleteMultRow_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView.SelectedRows)
{
if (!row.IsNewRow)
{
dataGridView.Rows.Remove(row);
}
}
}
十二、清除所有行
清除所有行的方法 Rows.Clear()是我们需要清除所有数据时使用的,清除后表头是不会删除的。
private void button_Clear_Click(object sender, EventArgs e)
{
//删除所有行
dataGridView.Rows.Clear();
}
十三、删除所有列
清除所有列的方法Columns.Clear() 是我们需要清除所有数据和表头时使用的,清除后表头会删除掉的,也就是没有了列,要重新添加数据时需要初始化列才可以的。
private void button_ClearColumns_Click(object sender, EventArgs e)
{
//删除包括标题在内的所有列
dataGridView.Columns.Clear();
}
十四、其它:选中单元格
下面实例实现的是指定选中第0行第1列。此单元格将高亮。文章来源:https://www.toymoban.com/news/detail-406983.html
dataGridView.CurrentCell = dataGridView.Rows[0].Cells[1];
十五、最后
上面讲到的是我平时有用到的DataGridView控件的方法,抽空用demo工程实现和描述了一遍,时间有限,如有描述的不够明白的,朋友们都可以与我讨论和指正。文章来源地址https://www.toymoban.com/news/detail-406983.html
到了这里,关于C# DataGridView控件的基础应用实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!