4

我有两个数据表,每个数据表都有 1 列:

dtTempCM
dtOldTempCM

在这两个表中,唯一的列名是Column1

我还有 2 个数据网格视图,每个都绑定到一个数据表:

dgvCurrentCM.DataSource = dtTempCM;
dgvOldCM.DataSource = dtOldTempCM;

如果它们不匹配,我如何比较每一行,并在一个(或两个)datagridviews 中突出显示它?到目前为止,我有这个:

foreach (DataRow row1 in dtTempCM.Rows)
{
   foreach (DataRow row2 in dtOldTempCM.Rows)
   {
        var array1 = row1.ItemArray;
        var array2 = row2.ItemArray;

        if (array1.SequenceEqual(array2))
        {
            //change row/cell color in dgvCurrentCM to red
            //change row/cell color in dgvOldCM to red
        }
    }
}

有任何想法吗?谢谢!

编辑:我也试过这个,但它会改变每个单元格的颜色,因为它将 dgvOldCM 中的每一行与 dgvCurrentCM 中的单行进行比较:

foreach (DataGridViewRow row1 in dgvCurrentCM.Rows)
{
    foreach (DataGridViewRow row2 in dgvOldCM.Rows)
    {
        if (row1.Cells[0].Value != row2.Cells[0].Value)
        {
            row1.DefaultCellStyle.ForeColor = Color.Red;
            row2.DefaultCellStyle.ForeColor = Color.Red;
        }
    }
}
4

3 回答 3

4

我会在其中一个 gridview 上进行迭代,与另一个类似:

    for (int i = 0; i < dgvCurrentCM.RowCount; i++)
    {
        if (dgvCurrentCM.Rows[i].Cells[0].Value != null)
        {
            if ((int)dgvCurrentCM.Rows[i].Cells[0].Value != (int)dgvOldCM.Rows[i].Cells[0].Value)
            {
                dgvCurrentCM.Rows[i].DefaultCellStyle.ForeColor = Color.Red;
                dgvOldCM.Rows[i].DefaultCellStyle.ForeColor = Color.Red;
            }
        }
    }
于 2013-03-07T18:07:55.297 回答
2

您可以生成两个数据表的交集,然后标记行:

DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();

dt1.Columns.Add("Col");
dt2.Columns.Add("Col");

for (int i = 0; i < 10; i++)
{
    DataRow dr = dt1.NewRow();
    dr["Col"] = i.ToString();
    dt1.Rows.Add(dr);
}

for (int i = 5; i < 15; i++)
{
    DataRow dr = dt2.NewRow();
    dr["Col"] = i.ToString();
    dt2.Rows.Add(dr);
}

var result = dt1.AsEnumerable().Intersect(dt2.AsEnumerable(), DataRowComparer.Default);

dataGridView1.DataSource = dt1;
dataGridView2.DataSource = dt2;

for (int i = 0; i < dataGridView1.RowCount -1; i++)
{
    DataRow currRow = ((DataRowView)dataGridView1.Rows[i].DataBoundItem).Row;
    if (result.Contains(currRow))
        dataGridView1.Rows[i].DefaultCellStyle.ForeColor = Color.Red;
}
于 2013-03-07T18:37:11.960 回答
-1
if (array1.SequenceEqual(array2))
{

}
else
{
//Do your action here!
}
于 2013-08-26T14:52:06.930 回答