我在单击按钮时将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这样的数据不匹配,它不会突出显示特定的行。我在这里想念什么吗?
答案 0 :(得分:1)
问题出在您的for
循环中。
您首先要将数据绑定到datagridview。
然后您要进入循环
在其中询问是否满足条件,是否再次将相同的数据绑定到datagridview,但是在着色后将其着色。
For循环继续,它再次进入满足条件的部分,再次绑定相同的数据,但是现在您用新的(但相同的)数据覆盖了彩色数据,然后为一些新行着色。
所以您需要做的是
因此代码应如下所示:
//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;
}
}