C#开发WinForm之DataGridView开发详解

C#开发WinForm之DataGridView开发详解

简介

DataGridView是WinForm中常用的控件之一,可以用于显示和编辑数据。本文将介绍DataGridView的使用方法,包括如何绑定数据、如何自定义样式、如何处理用户操作等。

数据绑定

要在DataGridView中显示数据,需要将数据源与控件绑定。假设我们有一个名为student的表格,包含id、name、age三个字段,并且我们已经将表格中的数据查询出来,并存在了一个名为ds的DataSet中。

我们可以通过以下代码将ds中student表的数据绑定到DataGridView中:

dataGridView.DataSource = ds.Tables["student"];

这样,DataGridView就会显示出student表的数据。如果我们想显示的不是整张表格,而是一个视图(包括部分列或只显示满足某些条件的记录),可以使用DataView来筛选。

下面的示例代码显示如何将student表中年龄大于20的记录显示在DataGridView中:

DataView dv = new DataView(ds.Tables["student"]);
dv.RowFilter = "age > 20";
dataGridView.DataSource = dv;

样式自定义

默认情况下,DataGridView显示的数据样式与平淡无味。我们可以自定义DataGridView单元格的样式和布局,让其看起来更美观。

单元格样式设置

我们可以通过设置DefaultCellStyle属性来设置所有DataGridView单元格的样式。例如,下面的代码将表格的背景色设置为浅灰色,前景色(即文字颜色)设置为黑色。

dataGridView.DefaultCellStyle.BackColor = Color.LightGray;
dataGridView.DefaultCellStyle.ForeColor = Color.Black;

我们还可以为不同的列设置不同的样式,方法是设置每列的DefaultCellStyle属性。例如,下面的代码设置第一列的文字颜色为红色,第二列的文字颜色为蓝色。

dataGridView.Columns[0].DefaultCellStyle.ForeColor = Color.Red;
dataGridView.Columns[1].DefaultCellStyle.ForeColor = Color.Blue;

单元格布局设置

另外,我们还可以设置单元格的布局,包括文字对齐方式、字体等。例如,下面的代码将单元格的内容垂直居中对齐,字体设置为12px的微软雅黑。

dataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView.DefaultCellStyle.Font = new Font("微软雅黑", 12);

用户操作处理

当用户对DataGridView进行编辑、排序、筛选等操作时,我们可以通过事件来响应这些操作并做出相应的处理。

编辑操作处理

当用户在DataGridView中编辑单元格并提交更改后,会触发CellEndEdit事件。我们可以在该事件中获取修改后的单元格的值,并进行相应的处理。例如,下面的代码将修改后的内容存储到数据库中。

private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewRow row = dataGridView.Rows[e.RowIndex];
    int id = Convert.ToInt32(row.Cells[0].Value);
    string name = row.Cells[1].Value.ToString();
    int age = Convert.ToInt32(row.Cells[2].Value);
    // 将修改后的数据存储到数据库中
    // ...
}

排序操作处理

当用户在DataGridView中点击列标题时,会对该列数据进行排序。我们可以在SortCompare事件中进行排序处理。例如,下面的代码实现了按照年龄升序排序的方法。

private void dataGridView_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    if (e.Column.Index == 2)  // 判断是否为年龄列
    {
        int v1 = Convert.ToInt32(e.CellValue1);
        int v2 = Convert.ToInt32(e.CellValue2);
        e.SortResult = v1.CompareTo(v2);  // 对年龄列进行升序排序
        e.Handled = true;  // 表示该事件已经处理
    }
}

筛选操作处理

当用户在DataGridView的筛选框中输入筛选条件时,会触发ColumnHeaderMouseClick事件。我们可以在该事件中获取用户输入的筛选条件,并使用DataView筛选数据。例如,下面的代码筛选年龄大于20的记录。

private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    if (dataGridView.Columns[e.ColumnIndex].HeaderText == "年龄")
    {
        string filter = "age > 20";
        DataView dv = new DataView(ds.Tables["student"]);
        dv.RowFilter = filter;
        dataGridView.DataSource = dv;
    }
}

示例

下面是一个简单的示例,演示了如何使用DataGridView显示数据,并对用户的编辑、排序、筛选操作进行相应的处理。

private DataSet ds;  // 数据集,包含student表格的数据
private DataView dv;  // 数据视图,用于筛选数据

private void Form1_Load(object sender, EventArgs e)
{
    // 加载数据并绑定到DataGridView中
    ds = loadStudentData();  // 加载student表格的数据
    dataGridView.DataSource = ds.Tables["student"];

    // 设置默认的单元格样式和布局
    dataGridView.DefaultCellStyle.BackColor = Color.LightGray;
    dataGridView.DefaultCellStyle.ForeColor = Color.Black;
    dataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
    dataGridView.DefaultCellStyle.Font = new Font("微软雅黑", 12);

    // 注册编辑、排序、筛选操作的事件处理函数
    dataGridView.CellEndEdit += dataGridView_CellEndEdit;
    dataGridView.SortCompare += dataGridView_SortCompare;
    dataGridView.ColumnHeaderMouseClick += dataGridView_ColumnHeaderMouseClick;
}

private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewRow row = dataGridView.Rows[e.RowIndex];
    int id = Convert.ToInt32(row.Cells[0].Value);
    string name = row.Cells[1].Value.ToString();
    int age = Convert.ToInt32(row.Cells[2].Value);
    // 将修改后的数据存储到数据库中
    // ...
}

private void dataGridView_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    if (e.Column.Index == 2)  // 判断是否为年龄列
    {
        int v1 = Convert.ToInt32(e.CellValue1);
        int v2 = Convert.ToInt32(e.CellValue2);
        e.SortResult = v1.CompareTo(v2);  // 对年龄列进行升序排序
        e.Handled = true;  // 表示该事件已经处理
    }
}

private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    if (dataGridView.Columns[e.ColumnIndex].HeaderText == "年龄")
    {
        string filter = "age > 20";
        if (dv == null)
        {
            dv = new DataView(ds.Tables["student"]);
        }
        dv.RowFilter = filter;
        dataGridView.DataSource = dv;
    }
}

private DataSet loadStudentData()
{
    // 从数据库或文件中加载student表格
    // ...
}

总结

DataGridView是WinForm中常用的控件之一,可以用于显示和编辑数据。我们可以通过数据绑定和样式自定义来控制其显示效果,通过事件响应来处理用户操作。祝大家使用DataGridView愉快!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#开发WinForm之DataGridView开发详解 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • Winform中如何跨线程访问UI元素

    在 WinForm 应用程序中,当后台线程需要更新界面上的 UI 元素时,需要注意跨线程访问 UI 元素的问题。因为 UI 元素只能由创建它的主线程访问和修改,如果在其他线程中访问,程序将抛出一个“ System.InvalidOperationException ”异常。下面介绍两种常见的跨线程访问 UI 元素的办法。 方法一、使用 Control.Inv…

    C# 2023年5月31日
    00
  • C#实现电脑麦克风录音

    下面是“C#实现电脑麦克风录音”的完整攻略: 准备工作: C#编程环境,可以使用Visual Studio或者JetBrains Rider等开发工具。 NAudio库,它是一个开源的音频处理库,可以在NuGet中进行安装。 实现步骤: 步骤1:初始化录音设备 我们需要调用System.Windows.Forms的API来检查电脑中可用的录音设备,然后选择合…

    C# 2023年5月15日
    00
  • C#实现自由组合本地缓存、分布式缓存和数据查询

    C#实现自由组合本地缓存、分布式缓存和数据查询 在应用程序中,缓存数据是提高性能和响应时间的有效方法。使用缓存可以减少对数据源的访问,从而提高应用程序的性能并减少响应时间。 在C#中,可以使用以下三种方式实现缓存: 本地缓存(Local Cache) 分布式缓存(Distributed Cache) 数据库缓存(Database Cache) 这三种方式都有…

    C# 2023年5月31日
    00
  • C#编程自学之数据类型和变量二

    C#编程自学之数据类型和变量二 总体思路 回顾C#中常用的数据类型和变量声明方法 学习如何将变量转换成其他数据类型 实践编写几个示例程序,加深对知识点的理解和应用能力 回顾常用的数据类型和变量声明 C#中常用的数据类型有: 整型:sbyte、byte、short、ushort、int、uint、long、ulong 浮点型:float、double、deci…

    C# 2023年5月31日
    00
  • SQL Server LocalDB 在 ASP.NET中的应用介绍

    SQL Server LocalDB是一种轻量级版本的SQL Server数据库引擎,它可以在本地计算机上运行,不需要安装完整的SQL Server数据库引擎。在ASP.NET应用程序中,可以使用SQL Server LocalDB来存储和管理数据。本文将介绍如何在ASP.NET中使用SQL Server LocalDB,包括创建数据库、创建表、插入数据、查…

    C# 2023年5月15日
    00
  • 用几行C#代码实现定时关机/重启(超详细!建议新手练习)

    好的。 在C#中实现定时关机和重启可以使用System.Diagnostics.Process.Start方法来启动cmd命令行,然后通过cmd命令来控制关机和重启的操作。 以下是实现定时关机功能的C#代码: 引入命名空间 using System.Diagnostics; 设置倒计时时间为30秒,即30秒后关机 var shutdownTimeInSeco…

    C# 2023年6月1日
    00
  • 用Linq从一个集合选取几列得到一个新的集合(可改列名)

    使用Linq可以从一个集合中选择一部分数据,然后形成一个新的集合,具体可分为以下几步: 使用Select()方法选择数据集合中的某些字段。 使用Select()方法创建一个匿名类型对象,指定新的列名。 使用ToList()方法生成一个新的集合对象。 下面是一个完整的示例代码: List<Student> students = new List&l…

    C# 2023年6月1日
    00
  • 聊聊Unity自定义组件之序列帧播放组件问题

    下面是“聊聊Unity自定义组件之序列帧播放组件问题”的完整攻略。 序列帧播放组件问题 问题描述 在使用Unity制作游戏时,我们经常需要用到序列帧播放,比如动画、特效等,如果每一帧都手动添加到游戏对象身上,这是一件非常繁琐的事情。因此,我们可以通过自定义一个序列帧播放组件来实现自动播放序列帧的效果。 但是在实现这一功能的过程中,我们可能会遇到一些问题,比如…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部