WinForm之DataGirdView傻瓜式笔记

前言

  用户界面 (UI) 设计人员经常发现需要向用户显示表格数据。 .NET Framework 提供了几种以表或网格形式显示数据的方法。 DataGridView 控件代表了该技术在 Windows 窗体应用程序中的最新发展。
  DataGridView 控件提供一种以表格格式显示数据的功能强大且灵活的方法。 可以使用该控件显示小型到非常大型的数据集的只读或可编辑视图。

一.创建项目

创建一个名为dataGridViewTest的项目,拖入一个datagridView控件,名称为dataGridView1。
form大小为1000, 600;
dataGridView1大小为650, 350
效果图:
在这里插入图片描述

二.添加数据

初始化datagirdview1,添加一些数据进去

        private void InitDataGridView()
        {
            //添加数据
            DataTable dt = new DataTable();

            dt.Columns.Add("学号");
            dt.Columns.Add("姓名");
            dt.Columns.Add("性别");
            dt.Columns.Add("年纪");
            dt.Columns.Add("数学");
            dt.Columns.Add("地理");
            dt.Columns.Add("物理");

            dt.Rows.Add("001","刘大","男",33,90,90,90);
            dt.Rows.Add("001", "关二", "男", 34, 96, 88, 96);
            dt.Rows.Add("001", "张三", "男", 29, 98, 60, 95);
            dt.Rows.Add("001", "赵四", "男", 29, 95, 90, 95);
            
            dataGridView1.DataSource = dt;
        }

效果图:
在这里插入图片描述

三.调整列宽

上图可以看到datagirdview有一部分没有显示出来,需要拖动滑动条才可以
设置列宽的两种方式:

1.直接指定列宽

  在InitDataGridView函数中继续添加代码

            var columns = dataGridView1.Columns;

            columns[0].Width = 30;
            columns[1].Width = 50;
            columns[2].Width = 60;
            dataGridView1.Columns[3].Width = 30;//这样设置也是没有问题的
            columns[4].Width = 30;
            columns[5].Width = 30;
            columns[6].Width = 30;

在这里插入图片描述

2.设置列宽自适应

  在InitDataGridView函数中继续添加代码

            for (int i = 0; i < columns.Count; i++)
            {
                columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            }

此时自适应的效果会覆盖掉上一步指定的列宽。也就是说自适应宽度优先级>指定宽度优先级。
效果图:
在这里插入图片描述

而DataGridViewAutoSizeColumnMode的属性有八种不同的效果,如下表

名称效果简单的说
NotSet列的大小调整行为从 System.Windows.Forms.DataGridView.AutoSizeColumnsMode 属性继承就是默认大小
None列宽不会自动调整。仅有一个初始列宽
ColumnHeader调整列宽,以适合列标题单元格的内容仅适应标题的大小,列成员不去考虑
AllCellsExceptHeader调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格自适应列成员大小,不去考虑标题大小
AllCells调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,不包括标题单元格自适应所有单元格的大小(费时间)
DisplayedCellsExceptHeader调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,不包括标题单元格行和列都考虑,除了标题
DisplayedCells调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,包括标题单元格行和列都考虑
Fill调整列宽,使所有列的宽度正好填充控件的显示区域,只需要水平滚动保证列宽在 System.Windows.Forms.DataGridViewColumn.MinimumWidth属性值以上。相对列宽由相对 System.Windows.Forms.DataGridViewColumn.FillWeight 属性值决定这个下面说

3.补充:

此时会发现上面的列表并未铺满真个datagirdview。
修改第2步代码:

            for (int i = 0; i < columns.Count; i++)
            {
                if (i == columns.Count - 1)
                {
                    columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                }
                else
                {
                    columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                }
            }

此时最后一列用上方表格的最后一个属性,会发现最后一列会将整个表格铺满
效果图:
在这里插入图片描述

四.显示行号

1.添加行号

添加一个函数dataGridView1_RowStateChanged

        private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1);
        }

然后设置datagridview的RowStateChanged事件为 dataGridView1_RowStateChanged

在这里插入图片描述
运行程序会发现多出了行号:
在这里插入图片描述

2.去除行号旁边的三角标

这个三角表我看着是一点点都不舒服,耶稣来了也得去掉
InitDataGridView函数继续往下写

            dataGridView1.RowHeadersDefaultCellStyle.Padding = new Padding(4);

这里的4可以自己试一试,如果太小了去除不掉,太大了又会遮住行号
效果图:
在这里插入图片描述

3.修改行号列的大小

此时会发现行号所在的列是否有点儿大
方法1:设置自适应大小(不推荐,太丑)
在这里插入图片描述

属性效果
EnableResizing用户可以使用鼠标调整列标头的宽度
DisableResizing用户不能使用鼠标调整列标头的宽度
AutoSizeToAllHeaders为适应所有行标头单元格的内容大小而进行的行标头宽度调整
AutoSizeToDisplayedHeaders为适应当前显示的行中所有行标头的内容大小而进行的行标头宽度调整
AutoSizeToFirstHeader为适应第一个行标头的内容大小而进行的行标头宽度调整

方法2:指定行号大小
1.行号居中
在这里插入图片描述

2.设置行大小
InitDataGridView添加

dataGridView1.RowHeadersWidth = 30;

五.去除最后一行待添加的行

在这里插入图片描述
这一行是datagridview提供的待添加的行,这个不需要,干掉!
点击datagirdview控件,找到有伤角黑色三角标,展开之后,取消"启用添加"选项即可

6.完整代码

目前仅用到这么多,后续用到会补充

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace dataGridViewTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitDataGridView();
        }

        private void InitDataGridView()
        {
            //添加数据
            DataTable dt = new DataTable();

            dt.Columns.Add("学号");
            dt.Columns.Add("姓名");
            dt.Columns.Add("性别");
            dt.Columns.Add("年纪");
            dt.Columns.Add("数学");
            dt.Columns.Add("地理");
            dt.Columns.Add("物理");

            dt.Rows.Add("001","刘大","男",33,90,90,90);
            dt.Rows.Add("001", "关二", "男", 34, 96, 88, 96);
            dt.Rows.Add("001", "张三", "男", 29, 98, 60, 95);
            dt.Rows.Add("001", "赵四", "男", 29, 95, 90, 95);

            dataGridView1.DataSource = dt;

            var columns = dataGridView1.Columns;

            columns[0].Width = 30;
            columns[1].Width = 50;
            columns[2].Width = 60;
            dataGridView1.Columns[3].Width = 30;//这样设置也是没有问题的
            columns[4].Width = 30;
            columns[5].Width = 30;
            columns[6].Width = 30;

            for (int i = 0; i < columns.Count; i++)
            {
                if (i == columns.Count - 1)
                {
                    columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                }
                else
                {
                    columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                }
            }

            dataGridView1.RowHeadersDefaultCellStyle.Padding = new Padding(4);
            dataGridView1.RowHeadersWidth = 30;
        }

        private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1);
        }

    }
}


参考链接:C# DataGridView控件的基础应用实例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值