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 { get; set; }
publicstring Name { get; set; }
publicstring Major { get; set; }
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(this, new 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 编辑过