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日

相关文章

  • C# 使用PictureBox实现图片按钮控件的示例步骤

    下面为大家分享C#使用PictureBox实现图片按钮控件的示例步骤: 步骤1:添加PictureBox控件 在窗体中添加一个PictureBox控件,在该控件的属性中设置Image属性为要作为按钮的图片文件。在此基础上,可以对控件进行进一步设置如:SizeMode等。 步骤2:实现按钮效果 实现按钮效果需要通过各种事件来实现。可以使用MouseEnter和…

    C# 2023年6月7日
    00
  • .NET Core Web APi大文件分片上传研究实现

    .NET Core Web API大文件分片上传研究实现 在Web应用程序中,大文件上传是一项常见的任务。为了提高上传效率和稳定性,我们可以将大文件分成多个小文件进行上传。在本攻略中,我们将详细讲解如何使用.NET Core Web API实现大文件分片上传,并提供两个示例说明。 步骤一:前端实现 在前端,我们需要使用JavaScript将大文件分成多个小文…

    C# 2023年5月17日
    00
  • c#异步读取数据库与异步更新ui的代码实现

    你好,想要实现c#异步读取数据库并异步更新UI,可以采用以下步骤: 步骤一:建立异步的数据库连接 在c#中,可以使用SqlClient.SqlConnection类来建立数据库连接,并使用await关键字进行异步操作。具体代码如下: public async Task<SqlConnection> ConnectToDBAsync() { str…

    C# 2023年5月31日
    00
  • 通用的CRUD之LiteDB

    前言 你要开发一个系统,是不是首要任务是先建库,建表,建字段,既所谓的数据建模(听起来高大上一点,数据建模也确实是个烧脑的活),要费不少功夫。不知你是否遇到过这样的场景。A产品有3个测试参数,B产品有6个测试参数,而且值和类型都各不相同,用SQL你要怎么建表呢?有人会说这简单“参数名,参数值两列搞定”,NO!数据类型考虑了吗,数据量考虑了吗?有人又说”每个参…

    C# 2023年5月6日
    00
  • C# ArrayList、HashSet、HashTable、List、Dictionary的区别详解

    C# ArrayList、HashSet、HashTable、List、Dictionary的区别详解 在C#中,有多种容器类型可以用来存储和管理数据。常见的容器类型包括ArrayList、HashSet、HashTable、List和Dictionary。本文将详细讲解这些容器的区别和用法。 ArrayList ArrayList是一种不需要定义类型的可变…

    C# 2023年6月7日
    00
  • C#文件操作类分享

    C#文件操作类分享 本文将分享C#中常见的文件操作类以及它们的使用方法,帮助开发者更好地处理文件输入输出。 StreamReader类 StreamReader类可以用于读取文本文件中的数据。 读取整个文件 string path = @"C:\data.txt"; using (StreamReader sr = new StreamR…

    C# 2023年5月31日
    00
  • C#如何让winform程序中的输入文本框保留上次的输入

    要让WinForm程序中的输入文本框保留上次的输入,一种比较常见的方法是使用应用程序设置(Application Settings),下面我将提供具体的攻略。 第一步:启用应用程序设置 在Visual Studio中打开你的WinForm项目; 打开项目属性窗口(可以通过在解决方案资源管理器中右键单击项目并选择“属性”或者通过菜单栏的“项目”->“属性…

    C# 2023年6月6日
    00
  • C# 读写XML(代码分享)

    下面是关于“C# 读写XML(代码分享)”的详细攻略: C# 读写XML(代码分享) 在C#中,我们可以使用XML(可扩展标记语言)来存储和传输数据。XML是一种文本格式,类似于HTML,但被用来存储和传输数据,而不是描述网页。在C#中,我们可以使用System.XML命名空间下的类来读写XML文件。 创建XML文件 我们可以使用System.XML命名空间…

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