2013-03-07 28 views
4

我有兩個數據表,每個具有1柱:根據兩個數據表中的差異更改datagridview中的顏色?

dtTempCM 
dtOldTempCM 

在這兩個表中,僅列名是Column1

我也有在各自鍵合到一個數據表的形式2個datagridviews:

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 
     } 
    } 
} 

任何想法?謝謝!

編輯:我想這太,但由於它在dgvCurrentCM每一行dgvOldCM比較單排它改變每個單元格的顏色:

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; 
     } 
    } 
} 
+2

兩個數據表中的行數是否相同? – 2013-03-07 18:05:24

+0

是的,總會有相同數量的行。 – 2013-03-07 18:07:06

回答

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; 
      } 
     } 
    } 
+0

謝謝!但由於某種原因,這會將每個單元的顏色改爲紅色。我穿過它,即使單元格值匹配,它仍然會改變顏色。 – 2013-03-07 18:17:48

+1

我有你的列的類型(int)的猜測,所以你需要在比較unbox。 – 2013-03-07 18:29:27

+0

該類型將字符串..我試着在代碼中,它工作得很好!非常感謝!!! – 2013-03-07 18:32:01

2

您可以生成兩個DataTable的交點,然後標記行:

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; 
} 
-1
if (array1.SequenceEqual(array2)) 
{ 

} 
else 
{ 
//Do your action here! 
} 
+0

這似乎是比較整個數據網格,而不是找到所有的差異。 – 2013-08-26 15:13:31

相關問題