避免在datagridview中重复

时间:2018-05-03 06:36:09

标签: c# datagridview duplicates

我试图检查一些关于此的类似帖子,但我找不到合适的解决方案,我有以下代码

    if(dgvOC.Rows.Count == 0)
    {
        dgvOC.Rows.Add(txtProd.Text, numCant.Value, txtTipo.Text, precioGuardado, precioGuardado * (int)numCant.Value);
    }
    for (int i = 0; i <= dgvOC.Rows.Count; i++)
    {
        if (txtProd.Text == dgvOC.Rows[i].Cells[0].Value.ToString())
        {
            MessageBox.Show("Usted ya ha agregado un producto con el mismo nombre" +
            ", modifique la cantidad o borre el producto para agregarlo" +
            " de nuevo.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            txtProd.Clear();
            txtTipo.Clear();
            numCant.Value = 0;
            return;
        }
        dgvOC.Rows.Add(txtProd.Text, numCant.Value, txtTipo.Text, precioGuardado, precioGuardado * (int)numCant.Value);
    }

首先如果是在开始时我不需要将它与任何东西进行比较,因为没有什么可以比较它所以我只是添加它(我的DGV将“AddingRows”属性设置为false)

我使用for来运行所有的DGV,然后是第二个如果我想要做的是将文本框与DGV中的每一行进行比较,如果它与MessageBox匹配则会弹出说你'我添加了一个具有相同名称的产品,然后它清除了一些TextBoxes和一个numericupdown,然后它返回,如果它与行添加不匹配

...我的问题是,使用此代码第一次插入DGV工作正常,但在第二次显示警告(即使我添加一个与产品不匹配的名称)和第三次一个在空白处添加一行

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

尝试这样的事情 创建一个方法来验证datagridview的内容以及是否有行。

       // Call this in your event.
     If(NoRowOrNoDuplicate())
   {   
    dgvOC.Rows.Add(txtProd.Text, numCant.Value, txtTipo.Text, precioGuardado, precioGuardado * (int)numCant.Value);
       }


  //The method be like
    private bool NoRowOrNoDuplicate()
            {
             // Add condition s here
           for (int i = 0; i <= dgvOC.Rows.Count; i++)
             {
                    if (txtProd.Text == dgvOC.Rows[i].Cells[0].Value.ToString())
                      {
        MessageBox.Show("Usted ya ha agregado un producto con el mismo nombre" +
        ", modifique la cantidad o borre el producto para agregarlo" +
        " de nuevo.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                   txtProd.Clear();
                   txtTipo.Clear();
                   numCant.Value = 0;
                   return false;
                    }
                   }
            Return true;
             }