如何从 c# 中的 datagridview 中删除重复行?

How to remove duplicate row from datagridview in c#?

这是我的数据网格

我尝试了以下代码来删除 datagridview 中的重复行

public static DataTable items = new DataTable();
items.Columns.Add("Backsn");
items.Columns.Add("Oprn Name");
for (int i = 0; i < dataGridView1.Rows.Count;i++ )
  {
 DataRow rw = items.NewRow();
 rw[0] = dataGridView1.Rows[i].Cells[2].Value.ToString();
 rw[1] = dataGridView1.Rows[i].Cells[8].Value.ToString();
 items.Rows.Add(rw);
}
dataGridView2.DataSource = items;
for (int i = 0; i < dataGridView2.Rows.Count; i++)
        {
            int k = 0;
            for (int j = 0; j < dataGridView2.Rows.Count; j++)
            {

                if (dataGridView2.Rows[i].Cells[0].Value == dataGridView2.Rows[j].Cells[0].Value && dataGridView2.Rows[i].Cells[1].Value == dataGridView2.Rows[j].Cells[1].Value)
                {
                     if (k != 0)
                    {
                        items.Rows.RemoveAt(j);
                        dataGridView2.DataSource = items;
                    }
                   k= k+1;
                }
            }
        }

但运气不好。我应该得到像 below.Please 帮助我解决的结果。

如果你的情况用下面的代码替换

 if (dataGridView2.Rows[i].Cells["Backsn"].Value == dataGridView2.Rows[j].Cells["Backsn"].Value && dataGridView2.Rows[i].Cells["Opm Name"]].Value == dataGridView2.Rows[j].Cells["Opm Name"].Value)`
                    {

如果您的 DataGrid 正在显示绑定到任何类型的数据源的数据,您应该尝试在绑定数据之前消除数据源中的重复项。

例如,如果您的 items 是任何一种 class T 的集合,您可以让 class 实现 IEquatable<T> 并重新定义您的数据源作为集合中的 IEnumerable<T>.Distinct() 值,或者将您的集合源转换为 HashSet<T>.

如果您绑定到某种数据库查询结果或table,您可以将绑定转换为消除重复行的视图。

如果它与DataTable 绑定,您不需要在datagridview 中进行更改,尽管如此,您应该申请删除dataTable itlsef 中的重复行。你可以尝试一种方法-

DataTable items = new DataTable();
items.Columns.Add("Backsn");
items.Columns.Add("Oprn Name");
for (int i = 0; i < dataGridView1.Rows.Count;i++ )
{
   DataRow rw = items.NewRow();
   rw[0] = dataGridView1.Rows[i].Cells[2].Value.ToString();
   rw[1] = dataGridView1.Rows[i].Cells[8].Value.ToString();
   if (!items.Rows.Cast<DataRow>().Any(row => row["Backsn"].Equals(rw["Backsn"]) && row["Oprn Name"].Equals(rw["Oprn Name"])))
       items.Rows.Add(rw);
}
   int RowSpan = 2;

        for (int i = grdGroup.Rows.Count - 2; i >= 0; i--)
        {
            GridViewRow currRow = grdGroup.Rows[i];
            GridViewRow prevRow = grdGroup.Rows[i + 1];
            if (currRow.Cells[0].Text == prevRow.Cells[0].Text)
            {
                currRow.Cells[0].RowSpan = RowSpan;
                prevRow.Cells[0].Visible = false;
                RowSpan += 1;
            }

            else
            {
                RowSpan = 2;
            }


        }

for another column in same grid

for (int i = grdGroup.Rows.Count - 2; i >= 0; i--)
            {
                GridViewRow currRow = grdGroup.Rows[i];
                GridViewRow prevRow = grdGroup.Rows[i + 1];

                if ((currRow.Cells[2].Text == prevRow.Cells[2].Text) && (currRow.Cells[0].Text == prevRow.Cells[0].Text))
                {

                    currRow.Cells[2].RowSpan = RowSpan;
                    prevRow.Cells[2].Visible = false;
                    RowSpan += 1;
                }

                else
                {
                    RowSpan = 2;
                }


            }