You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除DataGridView中含.exe扩展名的行?代码实现求助

如何删除DataGridView中扩展名为.exe的行?

你的代码目前有两个主要问题:一是RemoveAt的语法错误,二是正向遍历行时直接删除会导致集合索引混乱——当你删除一行后,后面的行会自动前移,下一次循环会跳过某些行,甚至抛出InvalidOperationException异常。下面给你两种可靠的解决方案:

方法一:倒序遍历删除行

倒序遍历从最后一行往前处理,就算删除当前行,前面的行索引不会受到影响,不会出现跳过或报错的情况:

// 从最后一行开始倒序遍历
for (int i = dataGridViewgrida.Rows.Count - 1; i >= 0; i--)
{
    DataGridViewRow row = dataGridViewgrida.Rows[i];
    
    // 先判断单元格值不为null,避免空引用异常
    if (row.Cells[1].Value != null)
    {
        string filePath = row.Cells[1].Value.ToString();
        // 用EndsWith精准判断扩展名(忽略大小写,匹配.EXE/.exe)
        if (filePath.EndsWith(".exe", StringComparison.OrdinalIgnoreCase))
        {
            // 先设置文字颜色(如果需要保留这个效果)
            row.Cells[1].Style.ForeColor = Color.Red;
            // 删除当前行
            dataGridViewgrida.Rows.RemoveAt(i);
        }
    }
}

方法二:先收集待删除行,再批量删除

这种方法更安全,尤其适合DataGridView绑定了数据源的场景,避免遍历原集合时修改它引发的异常:

// 创建列表收集要删除的行
List<DataGridViewRow> rowsToDelete = new List<DataGridViewRow>();

foreach (DataGridViewRow row in dataGridViewgrida.Rows)
{
    if (row.Cells[1].Value != null)
    {
        string filePath = row.Cells[1].Value.ToString();
        if (filePath.EndsWith(".exe", StringComparison.OrdinalIgnoreCase))
        {
            row.Cells[1].Style.ForeColor = Color.Red;
            rowsToDelete.Add(row);
        }
    }
}

// 批量删除收集到的行
foreach (DataGridViewRow row in rowsToDelete)
{
    dataGridViewgrida.Rows.Remove(row);
}

额外建议:如果DataGridView绑定了数据源

如果你的DataGridView是绑定到DataTable这类数据源,直接操作数据源会更高效,DataGridView会自动刷新:

// 假设数据源是DataTable
DataTable dataTable = (DataTable)dataGridViewgrida.DataSource;

// 筛选出所有扩展名为.exe的行并删除
var rowsToDelete = dataTable.Rows.Cast<DataRow>()
    .Where(row => row[1].ToString().EndsWith(".exe", StringComparison.OrdinalIgnoreCase))
    .ToList();

foreach (DataRow row in rowsToDelete)
{
    row.Delete();
}

// 提交更改
dataTable.AcceptChanges();

关键注意点

  • 一定要先判断row.Cells[1].Value != null,防止空引用异常;
  • 用EndsWith代替Contains,避免误删文件名中间包含.exe的文件(比如test.exe.txt);
  • 避免在foreach遍历DataGridView.Rows时直接删除行,这会破坏集合的遍历状态。

内容的提问来源于stack exchange,提问作者Marek Pucek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:52:30