C#中的DataGridView中添加按钮并操作数据

这篇具有很好参考价值的文章主要介绍了C#中的DataGridView中添加按钮并操作数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

背景

一、在DataGridView中显示需要的按钮

二、给DataGridView添加事件,可以通过按钮来操作数据库

三、在按钮上鼠标箭头变成小手样式

四、总结


背景

最近在项目中有需求需要在DataGridView中添加“删除”、“修改”按钮,用来对数据的操作以及显示。

C#中的DataGridView中添加按钮并操作数据

一、在DataGridView中显示需要的按钮

 首先在DataGridView中添加需要的列,此列是用来存放按钮的。

在DataGridView中显示按钮可以提供一种直观和交互性强的用户界面。通过在DataGridView中添加按钮列,可以在每一行的特定单元格中显示按钮,并在点击按钮时执行相应的操作。

按钮可以用作一级标题,以提供一种快速访问和操作数据的方式。例如,可以在每一行的按钮列中添加一个"编辑"按钮,使用户能够快速编辑该行的数据。另外,还可以添加其他按钮,如"删除"按钮、"查看详情"按钮等,以满足不同的需求。

这些按钮可以通过设置DataGridViewButtonColumn的属性来自定义。可以设置按钮列的标题、按钮上显示的文本、按钮的样式等。通过设置按钮列的事件处理程序,可以在按钮被点击时执行相应的操作。例如,可以在按钮的点击事件中弹出编辑窗口,或者直接更新数据库中的数据。

通过在DataGridView中显示需要的按钮,可以提供一种直观和方便的操作界面,使用户能够快速访问和操作数据。这种方式可以大大提高用户的工作效率和用户体验。

然后在代码中“画”按钮。

if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
            {
                if (this.dgvwProdCode.Columns[e.ColumnIndex].Name == "act")
                {
                    StringFormat sf = StringFormat.GenericDefault.Clone() as StringFormat;//设置重绘入单元格的字体样式
                    sf.FormatFlags = StringFormatFlags.DisplayFormatControl;
                    sf.Alignment = StringAlignment.Center;
                    sf.LineAlignment = StringAlignment.Center;
                    sf.Trimming = StringTrimming.EllipsisCharacter;

                    e.PaintBackground(e.CellBounds, true);//重绘边框

                    //设置要写入字体的大小
                    System.Drawing.Font myFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                    SizeF sizeDel = e.Graphics.MeasureString("删除", myFont);
                    SizeF sizeMod = e.Graphics.MeasureString("修改", myFont);
                    SizeF sizeIsEnable = e.Graphics.MeasureString("启用/禁用", myFont);

                    float fDel = sizeDel.Width / (sizeDel.Width + sizeMod.Width + sizeIsEnable.Width); //
                    float fMod = sizeMod.Width / (sizeDel.Width + sizeMod.Width + sizeIsEnable.Width);
                    float fIsEnable = sizeIsEnable.Width / (sizeDel.Width + sizeMod.Width+ sizeIsEnable.Width);

                    //设置每个“按钮的边界”
                    RectangleF rectDel = new RectangleF(e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width * fDel, e.CellBounds.Height);
                    RectangleF rectMod = new RectangleF(rectDel.Right, e.CellBounds.Top, e.CellBounds.Width * fMod, e.CellBounds.Height);
                    
                    RectangleF rectIsEnable = new RectangleF(rectMod.Right, e.CellBounds.Top, e.CellBounds.Width* fIsEnable, e.CellBounds.Height);
                    e.Graphics.DrawString("删除", myFont, Brushes.Black, rectDel, sf); //绘制“按钮”
                    e.Graphics.DrawString("修改", myFont, Brushes.Black, rectMod, sf);
                    e.Graphics.DrawString("启用/禁用", myFont, Brushes.Black, rectIsEnable, sf);
                    e.Handled = true;
                }
            }

以上代码是在DataGridView中可以显示需要的按钮。

二、给DataGridView添加事件,可以通过按钮来操作数据库

使用CellMouseClick方法来去执行事件。

通过在DataGridView中添加事件,可以通过按钮来操作数据库。这种方式可以为用户提供一种方便的界面,使用户能够通过点击按钮来执行数据库操作,如插入、更新或删除数据。

首先,需要在DataGridView中添加一个按钮列。可以通过创建一个DataGridViewButtonColumn对象,并设置相应的属性,如标题、按钮上显示的文本等,来实现按钮列的添加。

接下来,可以为DataGridView的CellClick事件添加事件处理程序。在事件处理程序中,可以判断点击的是按钮列,并执行相应的操作。可以通过判断点击的列索引和行索引来确定点击的是哪个按钮。然后,可以通过获取点击按钮所在行的数据,来进行相应的数据库操作。例如,可以通过row.Cells[columnIndex].Value来获取所需的数据,然后调用相应的数据库操作方法来插入、更新或删除数据。

在执行数据库操作之前,可能需要进行一些验证或确认操作,以确保数据的准确性和完整性。可以使用MessageBox或其他适当的方式来显示验证或确认提示,然后根据用户的选择来决定是否执行数据库操作。

通过在DataGridView中添加事件,并通过按钮来操作数据库,可以为用户提供一种方便和直观的界面,使用户能够快速进行数据库操作。这种方式可以提高用户的工作效率,同时也可以保证数据的准确性和完整性。

 private void dgvwProdCode_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
            {
                Point curPosition = e.Location;//当前鼠标在当前单元格中的坐标
                if (this.dgvwProdCode.Columns[e.ColumnIndex].Name == "act")
                {
                    Graphics g = this.dgvwProdCode.CreateGraphics();
                    System.Drawing.Font myFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                    SizeF sizeDel = g.MeasureString("删除", myFont);
                    SizeF sizeMod = g.MeasureString("修改", myFont);
                    SizeF sizeIsEnable = g.MeasureString("启用/禁用", myFont);
                    float fDel = sizeDel.Width / (sizeDel.Width + sizeMod.Width + sizeIsEnable.Width);
                    float fMod = sizeMod.Width / (sizeDel.Width + sizeMod.Width + sizeIsEnable.Width);
                    float fIsEnable = sizeIsEnable.Width / (sizeDel.Width + sizeMod.Width + sizeIsEnable.Width);
                    Rectangle rectTotal = new Rectangle(0, 0, this.dgvwProdCode.Columns[e.ColumnIndex].Width, this.dgvwProdCode.Rows[e.RowIndex].Height);
                    RectangleF rectDel = new RectangleF(rectTotal.Left, rectTotal.Top, rectTotal.Width * fDel, rectTotal.Height);
                    RectangleF rectMod = new RectangleF(rectDel.Right, rectTotal.Top, rectTotal.Width * fMod, rectTotal.Height);
                    RectangleF rectIsEnable = new RectangleF(rectMod.Right, rectTotal.Top, rectTotal.Width * fIsEnable, rectTotal.Height);
                    //判断当前鼠标在哪个“按钮”范围内
                    if (rectDel.Contains(curPosition))//删除
                    {
                        IProduct product = new ProductImpl();
                        ProductInfoEntity productInfo = new ProductInfoEntity();
                        productInfo.recipe = dgvwProdCode.Rows[e.RowIndex].Cells[1].Value.ToString();
                        
                        if (product.Delete(productInfo) > 0)
                        {
                            this.dgvwProdCode.Rows.RemoveAt(e.RowIndex);
                            MessageBox.Show("删除成功");
                        }

                        dgvwProdCode.Refresh();//刷新显示
                    }
                    else if (rectMod.Contains(curPosition))//修改
                    {
                        // FormProductOperate formProductOperate = new FormProductOperate();
                        FormProductOperate formProductOperate = FormProductOperate.GetInstance();
                        formProductOperate.Text = "修改产品";
                        formProductOperate.btnAdd.Visible = false;
                        formProductOperate.btnConfirm.Visible = true;
                        formProductOperate.recipe = dgvwProdCode.Rows[dgvwProdCode.CurrentRow.Index].Cells[1].Value.ToString();
                        formProductOperate.Show();
                        dgvwProdCode.Refresh();//刷新显示
                    }
                    else if (rectIsEnable.Contains(curPosition))
                    {
                        IProduct product = new ProductImpl();
                        //获取选中产品记录产品id
                        string recipe = dgvwProdCode.Rows[dgvwProdCode.CurrentRow.Index].Cells[1].Value.ToString();
                        if (product.UpdateStatus(recipe) > 0)
                        {
                            UpDataViewSource();
                            MessageBox.Show("状态更改成功");
                        }

                    }
                        
                }
            }}

三、在按钮上鼠标箭头变成小手样式

使用CellMouseMove方法

private void dgvwProdCode_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
            {
                Point curPosition = e.Location;//当前鼠标在当前单元格中的坐标
                if (this.dgvwProdCode.Columns[e.ColumnIndex].Name == "act")
                {
                    this.Cursor = Cursors.Hand;
                    //解决绘图时画面闪烁
                    SetStyle(ControlStyles.UserPaint, true);
                    SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
                    SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲

                }
            }
        }

这样在DataGridView中完整的按钮和操作就完成。以及样式上的修改。

四、总结

在C#中,可以通过在DataGridView中添加按钮列,并在按钮的事件处理程序中操作数据。这是一种常见的实现方式,可以为用户提供方便的操作界面。

首先,在设计视图中,将一个DataGridView控件添加到窗体上。然后,在DataGridView的列集合中添加一个按钮列。这可以通过创建一个DataGridViewButtonColumn对象,并设置相应的属性来实现。例如,可以设置按钮列的标题、按钮上显示的文本以及按钮列的单元格都显示相同的文本。

接下来,需要处理按钮的点击事件。可以在DataGridView的CellClick事件中判断点击的是按钮列,并执行相应的操作。在事件处理程序中,可以通过判断点击的列索引和行索引来确定点击的是哪个按钮。然后,可以通过获取点击按钮所在行的数据,来进行相应的操作。例如,可以通过row.Cells[columnIndex].Value来获取对应列的值,然后执行相应的操作,如编辑数据、删除数据等。

最后,可以编写操作数据的方法。根据需要,可以在按钮的点击事件处理程序中调用相应的方法来操作数据。例如,可以弹出编辑窗口,让用户编辑数据,或者直接更新数据库中的数据。在操作数据的方法中,可以使用row.Cells[columnIndex].Value来获取所需的数据。

通过以上步骤,就可以在DataGridView中添加按钮,并在按钮的点击事件中操作数据。这样,用户就可以通过点击按钮来执行相应的操作,使界面更加直观和易用。你可以根据具体需求,进一步扩展按钮的功能和操作,以满足实际需求。文章来源地址https://www.toymoban.com/news/detail-410702.html

到了这里,关于C#中的DataGridView中添加按钮并操作数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • c# 从零到精通 读取连接数据库-并将数据填入dataGridView控件中

    c# 从零到精通 读取连接数据库-并将数据填入dataGridView控件中 using System; using System.Data; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace Test01 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { SqlConnection conn

    2024年02月09日
    浏览(35)
  • C# Winfrom通过COM接口访问和控制Excel应用程序,将Excel数据导入DataGridView

    1.首先要创建xlsx文件 2.在Com中添加引用 3. 添加命名空间         using ApExcel = Microsoft.Office.Interop.Excel;         --这样起个名字方面后面写 4.样例 5.获取sheet.Cells值的时候也可以不使用强制转换,还要注意这个的下标是从1开始的

    2024年02月11日
    浏览(35)
  • c# 从零到精通 读取连接数据库-并将数据填入dataGridView控件中,并且获取所选单元格的值

    c# 从零到精通 读取连接数据库-并将数据填入dataGridView控件中,并且获取所选单元格的值 using System; using System.Data; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace Test02 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SqlConnection conn; SqlDataAdapter sd

    2024年02月09日
    浏览(32)
  • 双击dataGridView控件中的数据行,弹出另一个窗体,并将数据传递到另一个窗体中的方法。实现窗体调用,并数据传输

    //实例化学生明细的窗体 public static frmStudentDetail frmsd; //主窗体双击单元格的事件 private void dgvStudent_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)//双击单元格的事件 { //通过Serverice类中的方法得到学生类 Student objectStudent = StudentService.GetStudentInfo(Convert.ToInt32( dgvStudent.Curr

    2024年02月04日
    浏览(32)
  • C#使用DataGridView模拟绘图

    接到一个需求,绘制一个水管线的图片,这种管线可以有12种分段方法,最后将这12种分段方法合并后在一条水管线上展示,要求: ⒈支持分段的属性展示; ⒉要求每个分段都能清晰展示,分段数在0(没有分段)~100之间,水管线长度不定; 3、每个分段的属性都有值,可以更

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

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

    2024年02月03日
    浏览(31)
  • C# DataGridView控件的基础应用实例

      DataGridView我把他叫做网格数据控件 。我们在显示表格数据的时候,经常会用想到用它, 他就像Excel表格一样。我们知道只要是数据表,就一定逃不掉表的增删查改操作。   该篇,我在VS2019的环境下通过demo实例来实现DataGridView控件的一系列功能,包括添加一行数据、切

    2023年04月09日
    浏览(32)
  • C# Winform DataGridView 控件和 DataTable

    目录 一、概述 二、DataTable 的用法 1.创建表和列 2.添加行 3.取值和赋值 4.删除行 5.遍历 DataTable 6.判断 DataTable 列中是否存在某个值 7.设置主键 8.获取 DataRow 所在的行号 9.DataTable 转换为 List 10.将 List 转 DataTable 三、DataGridView 的用法 1.绑定数据 2.获取绑定的数据源 3.获取 / 设置

    2024年02月10日
    浏览(32)
  • 【Vue】给 elementUI 中的 this.$confirm、this.$alert、 this.$prompt添加按钮的加载效果

    主要使用 beforeClose 方法实现 loading 的效果 beforeClose MessageBox 关闭前的回调,会暂停实例的关闭 具体实现:( this.$confirm、this.$alert、 this.$prompt 实现方法一样) 实现前: 实现后:

    2024年02月17日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包