Привязка и выделение определенной строки DataGridView - PullRequest
0 голосов
/ 26 июня 2018

Я связываю данные из файла 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 голосов
/ 26 июня 2018

Проблема в вашем for цикле.

Сначала вы привязываете данные к вашему обзору данных.

Тогда вы входите в цикл

Внутри него вы спрашиваете, выполняется ли условие, и если это вы, СНОВА связываете те же данные с сеткой данных, но после этого вы окрашиваете их.

Цикл 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...