繁体   English   中英

如何删除具有循环文本框文本值的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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM