C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作

这篇具有很好参考价值的文章主要介绍了C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在展示和处理二维数据时,我们常常会想起Excel。但是使用Excel自带的各种函数处理较为繁琐的步骤时显得略显吃力,如果使用Excel自带宏编程,可能会对VB语言不甚熟悉或是感觉不nice。这个时候,熟悉C#编程语言的你,就需要用到DataGridView控件,设计一款二维数据处理利器。 此处,我们开始进入对DataGridView摸索学习的环节…

在上一章内容《C#Winform的DataGridView控件使用详解1-七种DataGridViewColumn类型使用方法》中,我们介绍了6种DataGridView列对象,在本章内容部中,我们将详细介绍DataGridViewTextBoxColumn对象的Cell设置(表头、表格内容、行序号)、右键弹出行操作(新建行、删除行、清空内容、复制、粘贴)。

DataGridView表格样式设置

DataGridView的表格样式包括表头(ColumnHeadersDefaultCellStyle)和表格内容(RowsDefaultCellStyle)的样式,此处我们对其的字体对齐方式点击自动排序宽度可调节来进行设置:
1、字体与对齐方式设置

// 设置表头居中,其对齐方式一共有10种,包含竖向的顶中底和水平的左中右以及NotSet
this.dtLineHCurvePara.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
//设置表头字体样式
this.dtLineHCurvePara.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 11);
//设置单元格cell内容居中
this.dtLineHCurvePara.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
//设置单元格cell字体样式
this.dtLineHCurvePara.RowsDefaultCellStyle.Font = new Font("宋体", 

设置各种居中和字体样式后,结果如下显示:
C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作
2、对齐与表格排序的相互影响
但是当我们设置了表头和单元格均居中后,但发现表头并没有出现居中效果,如下图:
C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作这里,我们需要调整一下表格列的参数,将排序模式设置为无排序:

C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作
设置了表头居中并没有显示居中效果的原因在于,该列排序模式为自动排序,所有该表头位置会出现一个便于排序点击的倒三角,会占据表头位置。
C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作
3、表格宽度调节
Excel表格的行高和列宽都能手动拉,为了满足一定的需求,我们需要设置是否可以调整行列尺寸(False:不能手动调整,True:可手动调整)。
C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作

DataGridView行序号设置

我们直接使用并填充数据的DataGridView默认是没有行号的,这里我们要利用表格的RowPostPaint函数,对表格进行重绘:

#region 显示行号
private void dtLineHCurvePara_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
	var grid = sender as DataGridView;
	var rowidx = (e.RowIndex + 1).ToString();
	var centerFormat = new StringFormat()
	{
	Alignment = StringAlignment.Center,
	LineAlignment = StringAlignment.Center
	};
	var headerBuunds = new 	System.Drawing.Rectangle(e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height);
	e.Graphics.DrawString(rowidx, new Font("宋体", 11), SystemBrushes.ControlText, headerBuunds, centerFormat);
}
#endregion

对表格进行重绘后,表格每添加一行,均会显示每行的行号,行号的字体也可以在代码中设置,表现如下:
C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作

右键弹出控件表格操作

为实现表格的会操作,给DataGridView绑定contextMenuStrip控件,然后在右键弹出菜单里面添加新建行删除行清除选中内容复制粘贴操作
首先在软件界面登录的时候,将表格与右键弹出框绑定。

#region 编辑平曲线界面的Load事件
private void sFrmLineHCurveParaEdit_Load(object sender, EventArgs e)
{
	this.dtLineHCurvePara.ContextMenuStrip = this.contextMenuStrip1;
}

C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作

DataGridView新建行

右键弹出框,点击【新建行】按钮,即可在表格最后新增一行

#region 新建行
private void btnNewRow_Click(object sender, EventArgs e)
{
    this.dtLineHCurvePara.Rows.Add();
}
#endregion

DataGridView删除行

右键弹出框,点击【删除行】按钮,即可删除指定行号的行,如果要删除选中行,需要循环遍历DataGridView的SelectedRows对象,获取选中行的行序号,删除即可。

#region 删除行
private void btnDeleteRow_Click(object sender, EventArgs e)
{
    int RowIndex = 1;//需要删除行的行序号
    this.dtLineHCurvePara.Rows.RemoveAt(RowIndex);
}
#endregion

DataGridView清除内容

右键弹出框,点击【清除】按钮,即可将选中单元格的内容清空

#region 清除选中内容
private void btnClear_Click(object sender, EventArgs e)
{
    //根据选中的datagridview单元格,对其内容赋值为""
    int cellsCount = this.dtLineHCurvePara.SelectedCells.Count; //选中的单元格数量
    for (int i = 0; i < cellsCount; i++)//循环选中的单元格
    {
        dtLineHCurvePara.SelectedCells[i].Value = "";
    }
}
#endregion

DataGridView复制

右键弹出框,点击【复制】按钮,即可将选中表格内容按照一定格式写入电脑剪切板,后续可直接在Excel表中粘贴即可,会保留一样的数据格式。

#region 复制选中的单元格内容
private void btnCopy_Click(object sender, EventArgs e)
{
    try
    {
    	Clipboard.SetText(this.dtLineHCurvePara.GetClipboardContent().GetData(DataFormats.Text).ToString());
    }
    catch{}
}
#endregion

DataGridView粘贴

右键弹出框,点击【粘贴】按钮,即可将剪切板上的内容按照格式依序粘贴到DataGridView的单元格内。它可以自动判断需要的行,然后行自增,可以判断需要的列。列数不够会弹出提示。可以实现直接将Excel表格内容粘贴进来。文章来源地址https://www.toymoban.com/news/detail-436004.html

#region 粘贴剪切板内表格内容到DataGridView
private void btnPaste_Click(object sender, EventArgs e)
{
    try
    {
        string clipboardText = Clipboard.GetText(); //获取剪贴板中的内容
        if (string.IsNullOrEmpty(clipboardText))//检测是否为空
        {
            return;
        }
        int colnum = 0;  //获取剪切板列数量
        int rownum = 0;  //获取剪切板行数量
        for (int i = 0; i < clipboardText.Length; i++)
        {
            if (clipboardText.Substring(i, 1) == "\t") //每列
            {
                colnum++;
            }
            if (clipboardText.Substring(i, 1) == "\n")  //每行
            {
                rownum++;
            }
        }
        //粘贴板上的数据来源于EXCEL时,每行末尾都有\n,来源于DataGridView是,最后一行末尾没有\n
        if (clipboardText.Substring(clipboardText.Length - 1, 1) == "\n")  //剪切板最后一位
        {
            rownum--;
        }
        //此时,行数列数均比真实行列内容对象少1
        colnum = colnum / (rownum + 1);  //?????
        object[,] data; //定义object类型的二维数组
        data = new object[rownum + 1, colnum + 1];  //根据剪贴板的行列数实例化数组
        //根据创建的data数组的行列数,检测是否当前datagridview行数大于等于data数组行数,少于则新建行
        while (rownum > this.dtLineHCurvePara.RowCount - this.dtLineHCurvePara.SelectedCells[this.dtLineHCurvePara.SelectedCells.Count - 1].RowIndex - 1) //每次创建五行,直到数量足够
        {
            for (int i = 0; i < 5; i++)
            {
                this.dtLineHCurvePara.Rows.Add();
            }
        }
        // 检查剪切板内的列是否多于datagridview2内的列
        if ((colnum + 1) > this.dtLineHCurvePara.ColumnCount)
        {
            MessageBox.Show("复制列数大于当前表格列数\n,请重新复制!");
            return;
        }
        string rowStr = "";
        //对数组各元素赋值
        for (int i = 0; i <= rownum; i++)
        {
            for (int j = 0; j <= colnum; j++)
            {
                //一行中的其它列
                if (j != colnum)
                {
                    rowStr = clipboardText.Substring(0, clipboardText.IndexOf("\t"));
                    clipboardText = clipboardText.Substring(clipboardText.IndexOf("\t") + 1); //将前面使用过的部分裁剪
                }
                //一行中的最后一列(最后一个不为\r)
                if (j == colnum && clipboardText.IndexOf("\r") != -1)
                {
                    rowStr = clipboardText.Substring(0, clipboardText.IndexOf("\r"));
                }
                //最后一行的最后一列(最后一个为\r)
                if (j == colnum && clipboardText.IndexOf("\r") == -1)
                {
                    rowStr = clipboardText.Substring(0);
                }
                data[i, j] = rowStr;
            }
            //截取下一行及以后的数据
            clipboardText = clipboardText.Substring(clipboardText.IndexOf("\n") + 1);
        }
        clipboardText = Clipboard.GetText();
        int cellsCount = this.dtLineHCurvePara.SelectedCells.Count; //选中的单元格数量
        int r1 = (this.dtLineHCurvePara.SelectedCells[cellsCount - 1].RowIndex); //选中的第一个的行下标
        int r2 = (this.dtLineHCurvePara.SelectedCells[0].RowIndex); //选中最后一个的行下标
        int c1 = (this.dtLineHCurvePara.SelectedCells[cellsCount - 1].ColumnIndex); //选中的第一个的列下标
        int c2 = (this.dtLineHCurvePara.SelectedCells[0].ColumnIndex); //选中的最后一个的列下表

        int rowIndex = Math.Abs(r2 - r1) + 1; //选中单元格的行数量
        int colIndex = Math.Abs(c2 - c1) + 1; //选中但换个的列数量

        if (colIndex != colnum + 1 || rowIndex != rownum + 1) //选中的行列数量与剪切板内的行列数量不一致
        {
            //如果区域不一致,选取选中的第一格单元格作为锚点
            for (int i = 0; i <= rownum; i++) //遍历行
            {
                for (int j = 0; j <= colnum; j++) //遍历列
                {
                    this.dtLineHCurvePara.Rows[i + r1].Cells[j + c1].Value = data[i, j];
                }
            }
        }
        else
        {
            for (int i = 0; i <= rownum; i++) //遍历行
            {
                for (int j = 0; j <= colnum; j++) //遍历列
                {
                    this.dtLineHCurvePara.Rows[i + r1].Cells[j + c1].Value = data[i, j];
                }
            }
        }
    }
    catch { }
    
}
#endregion

到了这里,关于C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#Winform中DataGridView控件根据鼠标左右键获取单元格值或者行列

    有多种方法可以获取单元格的值或者行列,此处选用了两种方式去获取分别用了CurrentCell方法和Rows[].Cells[]的方法去获取行列值 鼠标左键获取单独行列值 此处获取左键行列值的触发条件是表格中数据变化获取,对应DataGridView事件CellValueChanged。 用方法CurrentCell中的Value,RowIndex

    2024年02月09日
    浏览(32)
  • C#——表格开发之DataGridView控件

    目录 一、概要 二、手动填充数据 1、如何手动填充数据 2、如何插入一行数据 3、如何修改单元格值 三、DataGridView控件绑定数据源 1、概述 2、将DataGridView绑定到BindingSource 使用DataGridView控件,您可以显示和编辑来自许多不同类型数据源的表格数据。 DataGridView控件为显示数据提

    2024年02月03日
    浏览(32)
  • C#Winform中的DataGridView的自动调整列宽设置

    C#Winform中的DataGridView的自动调整列宽设置属性为AutoSizeColumnMode 的枚举值如下: 1、AllCells 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格。   2、AllCellsExceptHeader 调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格。   3、ColumnHeader 调整列宽,以

    2024年02月13日
    浏览(22)
  • C# winform使用scottplot图表控件快速入门设置XY轴缩放

    Hello大家好我是开箱测评小汪,在C#项目开发中使用图表控件,有时候我们希望放大或缩小图表控件来看数据细节和整体数据情况。所有本期课程将带介绍Scottplot图表控件如何来实现这个功能。   本期课程的要达到的目的: 设置鼠标管轮缩放进行缩放 设置鼠标右键长按进行拖

    2024年02月15日
    浏览(34)
  • C# Winform鼠标样式设置方法

    在 Winform 中,默认鼠标样式是一个白色箭头,移到按钮 button 上也不变为手指形,不容易区分是否可以点击(特别是 button 样式不是默认的时候)。如果鼠标移到 button 上自动变为手形,像网页中的链接一样,则很容易区分能否点击,不管 button 样式是否完全改变(如:样式设

    2024年02月09日
    浏览(35)
  • 在Winform分页控件中集成保存用户列表显示字段及宽度调整设置

    在Winform的分页控件里面,我们提供了很多丰富的功能,如常规分页,中文转义、导出Excel、导出PDF等,基于DevExpress的样式的分页控件,我们在其上面做了不少封装,以便更好的使用,其中就包括集成保存用户列表显示字段及宽度调整设置。本篇随笔介绍这个实现的过程,通过

    2024年02月03日
    浏览(31)
  • C# Winform DataGridView 数据刷新问题

    目录 一、问题 二、创建项目 三、绑定空的数据源 四、绑定有数据的数据源 五、修改绑定的数据源 六、解决数据源刷新问题 七、解决刷新数据界面闪烁 DataGridView 是比较常用的表格控件,在 DataGridView 中显示数据, 一般使用 dataGridView1.DataSource = 数据源,来绑定数据,数据

    2024年02月12日
    浏览(33)
  • qt设置控件的风格样式

    设置tablewidget 设置表头样式 设置Lineedit样式 设置GroupBox样式 设置CheckBox的样式 设置PushButton的样式 设置RadioButton的样式 设置ComboBox的样式 设置Label的样式

    2024年02月14日
    浏览(26)
  • EasyExcel设置表格样式

    工具类 使用 主要是文字居中

    2024年02月11日
    浏览(29)
  • qt 系列(二)---qt designer通过设置控件样式表进行背景颜色设置

    1. 前言 一般Layouts不可以进行改变样式表,当我们想修改背景样式表,同时又不改变其他控件的颜色时,可以选择List View 控件改变背景颜色。 2. 设置背景 (1)配置 .qrc 文件 新建mypicture.qrc文件,记事本打开 (2)右键选择项目–添加–现有项,选择建立的.qrc文件,此时,项

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包