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日

相关文章

  • NetCore 配置Swagger的详细代码

    以下是“NetCore配置Swagger的详细代码”的完整攻略: 什么是Swagger Swagger是一种API文档生成工具,它可以自动生成API文档,并提供一个交式UI,使开人员可以轻松地测试API。 配置Swagger的详细代码 配置Swagger的详细代码包括以下步骤: 安装Swashb.AspNetCore NuGet包。 在Startup.cs文…

    C# 2023年5月12日
    00
  • asp实现二进制字符串转换为Unicode字符串

    实现二进制字符串转换为Unicode字符串,可以通过以下步骤来完成: 将二进制字符串转换为byte数组。可以通过将二进制字符串每8位作为一个byte元素,将这些byte元素组成一个byte数组,来实现二进制字符串转换为byte数组。 示例1: 假设有以下二进制字符串:01100001011100100111001101110100 按照每8位作为一个byte…

    C# 2023年6月7日
    00
  • C#基于Sockets类实现TCP通讯

    C#基于Sockets类实现TCP通讯攻略 TCP/IP协议是网络编程的基石,它提供了可靠的传输和连接保障。在C#语言中,可以使用Sockets类库进行网络编程。接下来,我们将详细讲解如何基于Sockets类实现TCP通讯。 步骤一:创建套接字 套接字是网络通讯的基础设施,它代表了通讯的终点。在C#中,可以通过Socket类进行套接字的创建和管理。 IPAd…

    C# 2023年6月6日
    00
  • C#连接Informix数据库的问题

    使用C#连接Informix数据库的过程可以分为以下几个步骤: 步骤一:安装Informix客户端SDK Informix客户端SDK包括ODBC和 .NET 数据提供程序等。可以从IBM官网下载对应版本的SDK,安装并配置。 步骤二:创建Informix数据库连接字符串 在C#中,可以通过连接字符串来与Informix数据库建立连接。根据个人需要可以选择使…

    C# 2023年5月15日
    00
  • 解析C#中断言与异常的应用方式及异常处理的流程控制

    解析C#中断言与异常的应用方式及异常处理的流程控制 断言的应用方式 在C#中,我们可以使用断言(Assert)来检测程序中的错误和异常。断言是一种用于检查代码逻辑的机制,通过在代码中加入断言,我们可以确保程序在运行时不会出现意料之外的行为,从而提高代码的质量和可靠性。 断言的基本使用方式如下: Debug.Assert(condition, message)…

    C# 2023年5月14日
    00
  • C#实现下载网页HTML源码的方法

    下面是“C#实现下载网页HTML源码的方法”的完整攻略,具体流程如下: 1. 发送HTTP请求 使用C#自带的WebRequest类向目标网址发送HTTP请求,获取服务器响应。HTTP请求的方式分为GET和POST,这里以GET为例,构造请求如下: string url = "http://www.example.com"; WebReq…

    C# 2023年6月3日
    00
  • C# File.ReadAllText()方法: 读取指定文件的所有文本

    C#中的File.ReadAllText()函数 在C#语言中,File类中提供了一个ReadAllText()函数,用于读取指定文件的所有内容。 函数语法 File.ReadAllText(string path); path : 要读取的文件路径。 函数作用 File.ReadAllText()函数将读取指定路径的文件的所有内容,并将其作为字符串返回。 …

    C# 2023年4月19日
    00
  • c# Linq查询详解

    C# LINQ查询详解 什么是LINQ LINQ即Language Integrated Query,是一种能够方便地操作数据的技术,它提供了一种类似SQL查询语句的方式来查询集合、数据库等多种类型的数据源。LINQ能够进行多项查询、排序、过滤、分组处理等多种操作,简化了数据操作的流程,使得C#程序员能够更加高效地进行编码。 LINQ的基本结构 LINQ查询…

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