【问题标题】:Check Whether duplicate rows are added to datagridview检查是否将重复行添加到datagridview
【发布时间】:2013-02-08 05:27:15
【问题描述】:

我有两个表单 Form1(DGV1) 和 Form2(DGV2),两个表单上都有 Datagridview 控件。

在 Form1 上有一个指向 Form2 的按钮链接,用户可以在其中向 Form1 datagridview(DGV1) 添加行。在 Form2 Datagridview 的第一列中有一个复选框,用户一次只能选择一行。有Form2 上的两个按钮 1) 完成 2) 添加项目

当用户通过依次选择行来单击添加项目时,必须将行添加到 Form1 上的 datagridview 中,当单击完成按钮时,表单 1 应显示所有添加的行。

我使用以下代码实现了这一点:

int inde x= objQM.gvItemDetails.Rows.Add(); 
DataGridViewRow row = (DataGridViewRow)objQM.gvItemDetails.Rows[index]; 
decimal UnitCos = Convert.ToDecimal(gvInventory.Rows[RowIndex].Cells[8].Value.ToString()); row[0] = false; 
row[1] = 1;
row[2] = gvInventory.Rows[RowIndex].Cells[6].Value.ToString();
row[3] = LoadSellQty();
row[4] = Convert.ToDecimal(gvInventory.Rows[RowIndex].Cells[8].Value.ToString());
row[5] = LoadSellQty() * UnitCost; 
row[7] = Convert.ToInt32(gvInventory.Rows[RowIndex].Cells[1].Value.ToString());

现在的问题是验证当在 Form2 上单击 AddItems 按钮时,是否将同一行添加到 Form1 上的 DGV1 中。我的意思是不能添加重复的行。

【问题讨论】:

    标签: c# winforms datagridview duplicates


    【解决方案1】:

    我相信您的 DataGridView 行中有一个唯一的名称,您可以使用 linq 来实现此目的

    bool IsExist = dataGridView1.Rows.Cast<DataGridViewRow>()
                                       .Count(c => !string.IsNullOrWhiteSpace(c.Cells[colIndex].EditedFormattedValue.ToString()) &&
                                       c.Cells[colIndex].EditedFormattedValue.ToString().Trim() == dgv[colIndex, rowIndex].EditedFormattedValue.ToString()) > 1;
    
    if (IsExist)
    {
       //do stuff
    }
    

    更新基于ItemID

    bool IsExist = dataGridView1.Rows.Cast<DataGridViewRow>()
                          .Count(c => 
                          c.Cells[colIndexOfItemId]
                          .EditedFormattedValue.ToString() == ItemID) > 1; //or (int)c.Cells[colIndexOfItemId].Value
    

    【讨论】:

    • 嗨..我有一个名为 ItemID 的唯一列..所以我可以使用您的代码进行检查。我会尝试让您知道。
    • 老兄,还有一个问题是……假设我通过单击 AddItems 按钮从 Form2 向 Form1 datagridview 添加了一行……然后完成按钮。假设我想通过单击链接添加另一行Form1中的按钮将我带到Form2 ..现在gridview变空并添加了一个全新的行。所以我想知道如何将ROW1添加到Form1 DGV并单击DONE按钮...如果我想再一次添加另一行 ROW2。Row1 和 Row2 都存在,但没有发生。如何实现这一点。
    • 我猜你关于如何检查存在 itemId 的问题已经解决了。在您的第二个问题中.. 很抱歉,但我不知道您要完成什么。但你可以改写你的问题。 :)
    • 是的,它已解决。谢谢队友。我想要完成的是..当我从 FORM2 向 DGV1 添加一行并单击完成按钮时..我将显示 Form1 DGV1。好的。现在再次,如果我想从 FORM2 向 DGV1 添加另一行..已经存在的行没有存储..希望你明白了
    • 没问题..只需创建一个数据表并将现有行添加到其中即可解决问题。
    【解决方案2】:

    我会尝试以下两种不同的方式,顺便说一句,我更喜欢解决方案 #2:

    1. 行数少的时候自己写个循环,一个一个的检查值,代码看起来不太好。

    2. 1234563更多详情请查看here

    【讨论】:

    • 嗨..从代码中可以看出,我没有使用任何数据集或数据表直接创建一行并将其添加到 Form1 上的其他网格中。所以还有其他建议。谢谢。跨度>
    • 好吧,我的猜测是,即使您绑定到 DataTable,即使间接添加数据也可能引发相同的异常。
    • 嗨 Simon..这段代码有效 objQM.gvItemDetails.Rows.Cast().Count(c => c.Cells[7].EditedFormattedValue.ToString() == ItemID) > 0)。但想在 datagridview 中维护行,如上所述。
    【解决方案3】:
     private void dgViewOrderList_CellValidated(object sender, DataGridViewCellEventArgs e)
            {
                if (e.ColumnIndex == 0 && dgViewOrderList.CurrentCell.Value != null)
                {
                    var cellValue = dgViewOrderList.CurrentCell.Value.ToString();
                    var isExist = dgViewOrderList.Rows.Cast<DataGridViewRow>().Count(c =>c.Cells[0].EditedFormattedValue.ToString() == cellValue) > 1;
                    if (isExist)
                    {
                        dgViewOrderList.CurrentCell.Value = null;
                    }
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多