绑定并突出显示特定的DataGridView行

时间:2018-06-26 09:47:59

标签: c# .net winforms datagridview

我在单击按钮时将Excel文件中的数据绑定到列表中,这非常有效。最后,数据被绑定到DataGridView。现在,我想遍历该列表,以检查绑定到DataGridView之后是否有任何未包含在数据库中的数据。如果有任何数据不匹配,则它应在DataGridView中用红色突出显示特定的行。注意:可能有多个不匹配的数据。如下图所示,代码已尝试:

grdUpload.Rows.Clear();
for (int i = 0; i < lstData.Count; i++) //lstData - The Data List
{
    if (Facede.ExcelUpload.CheckIfExists(lstData)) //Checking if any data mismatches
    {
       grdUpload.DataSource = lstData;
       grdUpload.Rows[i].DefaultCellStyle.BackColor = Color.Red; //Highlight the row data that mismatches
    }
    else
    {
       grdUpload.DataSource = lstData;
    }
}

public bool CheckIfExists(List<Data> lst)
{
   bool flag = false;

   foreach (Data d in lst)
   {
      string Query = "SELECT M.EmpNo FROM Data m WHERE M.EmpNo = '" + d.EmpNo + "'";
      DataTable dt = SelectData(Query);

       if (dt != null && dt.Rows.Count > 0)
       {
          flag = true;
       }
       else
       {
          flag = false;
       }
   }

   return flag;
}

现在的问题是,如果像EmpNo这样的数据不匹配,它不会突出显示特定的行。我在这里想念什么吗?

Sample Image

1 个答案:

答案 0 :(得分:1)

问题出在您的for循环中。

您首先要将数据绑定到datagridview。

然后您要进入循环

在其中询问是否满足条件,是否再次将相同的数据绑定到datagridview,但是在着色后将其着色。

For循环继续,它再次进入满足条件的部分,再次绑定相同的数据,但是现在您用新的(但相同的)数据覆盖了彩色数据,然后为一些新行着色。

所以您需要做的是

  • 将数据加载到datagridview
  • 遍历datagridviewrows,如果满足条件则将该行涂上颜色

因此代码应如下所示:

//Here you bind your data to datagridview
//In code bellow if you want to get row's column's data use 
//row.Cells["CELL_VALUE"].Value (convert to what datatype you need before comparing)

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (condition)))
    {
        dataGridView1.Rows[row.Index].DefaultCellStyle.BackColor = Color.Red;
    }
}