LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

WinForm 中如何给每一行 DataGridView 添加编辑删除按钮

admin
2025年5月18日 9:44 本文热度 78

前言

WinForm 是 Microsoft .NET Framework 提供的一个图形用户界面(GUI)开发框架,凭借其简单易用、功能丰富的特性,成为许多开发快速开发桌面应用程序的首选工具。在实际开发中,经常需要展示和操作表格数据,这时 DataGridView 控件就显得尤为重要。

本文将介绍如何在 WinForm 中使用 DataGridView 控件,并通过添加"编辑"和"删除"按钮实现对每一行数据的交互式操作。

文章案例基于 Visual Studio 2022 编写,适合初学者快速上手并掌握该控件的核心使用方法。

#WinForm开发技巧

DataGridView 控件

DataGridView 是 Windows Forms 中一个非常强大且灵活的表格控件,用于显示和编辑结构化数据。它取代了旧版本中的 DataGrid 控件,提供了更丰富的功能和更好的用户体验。

主要特性包括:

  • 支持绑定多种类型的数据源,如 DataTable、List<T> 和数组;

  • 提供丰富的样式设置选项,可自定义单元格外观;

  • 支持排序、筛选和分组等高级功能;

  • 自定义列类型,如文本框、复选框、下拉框等;

  • 可动态添加或删除行与列,支持单元格级别的编辑操作。

这些特性使得 DataGridView 成为 WinForm 开发中最常用的数据显示控件之一。

运行效果

代码实现

DataGridView 中添加编辑与删除按钮.

1、窗体代码

public partialclassForm1 : Form
{
    private BindingSource bindingSource = new BindingSource();
    private List<Student> students = new List<Student>();
    privateint currentPage = 0;
    privateint pageSize = 10;
    public Form1()
    {
        InitializeComponent();
        CenterToParent();
        CenterToScreen();
        LoadData();
        // 设置分页
        bindingSource.DataSource = GetPagedData(0, pageSize);
        dataGridView1.DataSource = bindingSource;
        // 添加编辑按钮列
        DataGridViewButtonColumn editButtonColumn = new DataGridViewButtonColumn();
        editButtonColumn.Name = "Edit";
        editButtonColumn.HeaderText = "编辑";
        editButtonColumn.Text = "编辑";
        editButtonColumn.UseColumnTextForButtonValue = true;
        dataGridView1.Columns.Add(editButtonColumn);
        // 添加删除按钮列
        DataGridViewButtonColumn deleteButtonColumn = new DataGridViewButtonColumn();
        deleteButtonColumn.Name = "Delete";
        deleteButtonColumn.HeaderText = "删除";
        deleteButtonColumn.Text = "删除";
        deleteButtonColumn.UseColumnTextForButtonValue = true;
        dataGridView1.Columns.Add(deleteButtonColumn);
        Label_CurrentPageShow.Text = $"{currentPage+1}/{students.Count / 10}";
    }
    private void Form1_Load(object sender, EventArgs e)
    { 
    }
    private void LoadData()
    {
        // 假设我们有一些数据
        for (int i = 1; i <= 100; i++)
        {
            string id = (10000+i).ToString();
            students.Add(new Student { ID = id, Name = "Name" + i, Major = "Major" + i });
        }
    }
    private List<Student> GetPagedData(int pageIndex, int pageSize)
    {
        return students.Skip(pageIndex * pageSize).Take(pageSize).ToList();
    }
    private void btnPrevious_Click(object sender, EventArgs e)
    {
        if (currentPage > 0)
        {
            currentPage--;
            bindingSource.DataSource = GetPagedData(currentPage, pageSize);
            ShowPageNumber();
        }
    }
    private void btnNext_Click(object sender, EventArgs e)
    {
        if ((currentPage + 1) * pageSize < students.Count)
        {
            currentPage++;
            bindingSource.DataSource = GetPagedData(currentPage, pageSize);
            ShowPageNumber();
        }
    }
    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex >= 0)
        {
            // 获取当前行的数据
            var student = (Student)bindingSource[e.RowIndex];
            if (e.ColumnIndex == dataGridView1.Columns["Edit"].Index)
            {
                // 编辑操作
                EditStudent(student);
            }
            elseif (e.ColumnIndex == dataGridView1.Columns["Delete"].Index)
            {
                // 删除操作
                DeleteStudent(student);
            }
        }
    }
    private void EditStudent(Student student)
    {
        // 编辑逻辑,例如弹出一个对话框让用户编辑信息
        MessageBox.Show($"编辑: {student.Name}");
    }
    private void DeleteStudent(Student student)
    {
        if (MessageBox.Show($"删除用户:{student.Name}""确认删除?", MessageBoxButtons.YesNo)== DialogResult.Yes)
        {
            // 删除逻辑
            students.Remove(student);
            bindingSource.DataSource = GetPagedData(currentPage, pageSize);
            MessageBox.Show($"删除成功: {student.Name}");
        }
    }
    InputBox inputBox = new InputBox();
    private void Btn_Add_Click(object sender, EventArgs e)
    {
        if (inputBox.OnValueComfirmChanged==null)
        {
            inputBox.OnValueComfirmChanged += ValueComfirmChangedCallback;
        }
        inputBox.Show();  
    }
    private void ValueComfirmChangedCallback(object sender, object receiver)
    {
        if(receiver!=null &&  receiver is Student)
        {
            Student student = (Student)receiver;
            student.ID = (10000 + students.Count).ToString();
            students.Add(student);
            ShowPageNumber();
        }
        inputBox.Hide();
    }
    public void ShowPageNumber()
    {
        int pageNum = 0;
        if (students.Count % 10>0)
        {
            pageNum = students.Count / 10+1;
        }
        else
        {
            pageNum = students.Count / 10;
        }
        Label_CurrentPageShow.Text = $"{currentPage + 1}/{pageNum}";
    }
}

2、数据代码

public classStudent
{
    publicstring ID { getset; }
    publicstring Name { getset; }
    publicstring Major { getset; }
    public Student()
    {
    }
    public Student(string name ,string major)
    {
        Name = name;
        Major = major;
    }
}

3、输入框代码

public delegate void ValueComfirmChanged(object sender ,object receiver);
public ValueComfirmChanged OnValueComfirmChanged;
public InputBox()
{
    InitializeComponent();
    this.CenterToParent();
}
private void Btn_Comfirm_Click(object sender, EventArgs e)
{
    OnValueComfirmChanged?.Invoke(thisnew Student(Tbx_Name.Text,Tbx_Major.Text));
}
private void Btn_Cancel_Click(object sender, EventArgs e)
{
    Tbx_Name.Clear();
    Tbx_Major.Clear();
    this.Hide();
}

总结

DataGridView 是 WinForm 开发中不可或缺的数据展示控件,具备强大的功能和高度的可定制性。通过使用 DataGridViewButtonColumn,我们可以轻松地为每一行添加"编辑"和"删除"按钮,提升用户操作的便捷性和直观性。

本文介绍了 DataGridView 的基本特性和使用方式,并详细演示了如何通过代码实现按钮列及其事件处理。对于刚接触 WinForm 开发的新手来说,这是一个实用且易于理解的功能点,能够帮助大家快速掌握数据表格操作的核心技巧。


阅读原文:原文链接


该文章在 2025/5/19 10:02:24 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved