0

我有两个表单 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 中。我的意思是不能添加重复的行。

4

3 回答 3

2

我相信您的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
于 2013-02-08T06:11:35.737 回答
0

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

  1. 行数少就自己写个循环,一个一个地检查值,这样代码看起来不太好。

  2. 如果您使用的是 DataSet 或 DataTable,请尝试将 UniqueConstraint 添加到实际包含所有列的 DataTable 上,因此如果添加了重复行,它将抛出异常并且您知道。有关更多详细信息,请查看此处

于 2013-02-08T05:55:55.633 回答
0
 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;
                }
            }
        }
    }
于 2015-02-25T21:41:02.240 回答