如何删除具有循环文本框文本值的 datagridview 行?

how to remove a datagridview row that has your textbox text value with a loop?

所以我有这个 datagridview2,我用它来搜索。 当我搜索并找到我想要的行时,我单击该行,所有值都转到文本框,并且有一个按钮使用文本框 1 上的 id 删除单击时的记录, 在另一个 datagridview1 中,我有一种方法可以在我按 id 删除该项目时刷新整个 datagridview 记录。 所以回到 datagridview2,我想当我删除该行时,该行也从 datagridview 中删除,而不使用我创建的 refilldatagridview() 方法并刷新我的 datagridview, 当我使用 dataGridView2.Rows.Remove(row); 它没有循环工作,以及 removeAt 索引 问题出在循环中,它永远不会进入 if,我不知道为什么

foreach (DataGridViewRow row in dataGridView2.Rows)
{
    if (row.Cells[0].Value.ToString().Equals(textBox1.Text))
    {
        MessageBox.Show("Match deleted");
        dataGridView2.Rows.Remove(row);                                
    }
}

不知道你说的是不是这个

使用 LINQ(尝试列名而不是列索引,如果我使用列索引会出错)

dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Cast<DataGridViewRow>().Where(w => w.Cells["Value1"].Value.ToString() == textBox1.Text).Select(s => s.Index).FirstOrDefault());
dataGridView2.Rows.RemoveAt(dataGridView2.Rows.Cast<DataGridViewRow>().Where(w => w.Cells["Value1"].Value.ToString() == textBox1.Text).Select(s => s.Index).FirstOrDefault());

正在搜索:

正在删除:

只需将上面的第 2 行代码放在循环中即可。

希望对您有所帮助!

我认为有几种方法可以尝试

#1 次简单迭代

for (int i = 0; i < dataGridView2.Rows.Count; i++)
{
    if (dataGridView2[i].Cells[0].Value.ToString().Equals(textBox1.Text))
        dataGridView2.Rows.Remove(dataGridView2[i]);
}

#2 如果你想用dataTable来搜索

var query = dTable.AsEnumerable().Where(r => r.Field<string>(columnName) == textBox1.Text);
foreach(var row in query.ToList())
{
       row.Delete();
}