You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C# WinForm中如何将DataGridView删除行逻辑封装为带Part参数的deletePart方法

解决C# WinForm自行车库存管理系统的deletePart方法问题

我明白你现在的困惑啦!咱们先拆解下你的代码为啥没生效:

核心问题所在

  1. 你新建了一个无关的MainScreen实例:在deletePart方法里new MainScreen()得到的是一个全新的、看不见的界面对象,和你正在操作的那个界面完全是两回事——所以你去删除它的Rows,自然不会影响到用户看到的DataGridView。
  2. 没用到传入的Part参数:课程要求方法接收Part参数来删除,但你现在的逻辑只是依赖当前选中行,完全没利用传入的deletedPart的信息,不符合要求。

修正后的解决方案

咱们调整两个地方:把方法改成非静态(直接操作当前界面控件),然后根据传入Part的ID匹配DataGridView里的对应行来删除。

1. 重写deletePart方法(改为MainScreen的非静态方法)

// 去掉static,让它属于当前MainScreen实例的方法
public bool DeletePart(Part deletedPart)
{
    bool isDeleted = false;

    // 弹出确认弹窗
    if (MessageBox.Show("Are you sure you want to remove this part?", "Remove Part", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
    {
        // 遍历DataGridView,根据Part的ID找到要删除的行
        foreach (DataGridViewRow row in PartsGridView.Rows)
        {
            // 注意:把"IdColumn"替换成你实际绑定Part ID的列名/索引
            // 比如如果ID是第一列,就用row.Cells[0].Value
            if (row.Cells["IdColumn"].Value.ToString() == deletedPart.Id.ToString())
            {
                PartsGridView.Rows.Remove(row);
                isDeleted = true;
                break; // 找到目标行后就退出循环,避免重复操作
            }
        }
    }

    return isDeleted;
}

2. 修改按钮点击事件代码

现在要从选中行里提取出对应的Part对象,再调用封装好的方法:

private void DeleteBtn_Click(object sender, EventArgs e)
{
    // 先判断是否选中了行,避免空引用异常
    if (PartsGridView.CurrentRow == null)
    {
        MessageBox.Show("请先选择要删除的零件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }

    // 从选中行获取Part对象(这里假设你的DataGridView绑定了Part列表,比如BindingList<Part>)
    // 如果是手动添加的行,就从Cells里逐个取值创建Part对象
    Part selectedPart = (Part)PartsGridView.CurrentRow.DataBoundItem;

    // 调用封装好的删除方法
    bool deleteSuccess = DeletePart(selectedPart);
    // 可选:可以根据返回值提示用户删除结果
    if (deleteSuccess)
    {
        MessageBox.Show("零件删除成功!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}

额外说明

  • 如果你的DataGridView不是绑定数据源(而是手动添加行),那提取Part的逻辑要改成从选中行的Cells里取值,比如:
    Part selectedPart = new Part
    {
        Id = int.Parse(PartsGridView.CurrentRow.Cells["IdColumn"].Value.ToString()),
        Name = PartsGridView.CurrentRow.Cells["NameColumn"].Value.ToString(),
        // 其他属性同理
    };
    
  • 一定要把"IdColumn"替换成你实际的列名或索引,不然会找不到对应行哦!

内容的提问来源于stack exchange,提问作者Dathon Weber

火山引擎 最新活动