Как выделить строки в datagrideview, которые не равны строкам в datatable? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть представление данных, содержащее много строк чисел.

И у меня есть таблица данных с одним столбцом содержит числа.

Я хочу выделить строки представления данных, которые не находятся в строках с данными. Я сравниваю только один столбец

Вот мой код:

DataTable SeatNum = new DataTable();

        SeatNum = "Select Nums from dbo.Nums";
try
        {
            foreach (DataGridViewRow row in dataGridView2.Rows)
            {
                if (row.IsNewRow) { return; }
                foreach (DataRow dtrow in SeatNum.Rows)
                {
                    if (dtrow[0].ToString() != (row.Cells[0].Value.ToString()))
                    {
                        row.Cells[0].Style.BackColor = Color.Red;
                        MessageBox.Show("Not Exist" + row.Cells[0].Value.ToString() + "\r\n" + dtrow[0].ToString(), "Caution", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        break;
                    }
                    else
                    {
                        row.Cells[0].Style.BackColor = row.DefaultCellStyle.BackColor;
                        MessageBox.Show("Exist" + row.Cells[0].Value.ToString() + "\r\n" + dtrow[0].ToString(), "Caution", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        break;
                    }
                }
            }
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.Message);
        }

Этот код просто выделяет строки, которые не соответствуют первой строке в datatable

Заранее спасибо.

1 Ответ

0 голосов
/ 24 июня 2019

Я исправил код и теперь он работает так, как я ожидал.

Я заменил:

foreach (DataRow dtrow in SeatNum.Rows)

Для цикла:

for (int i = 0; i < SeatNum.Rows.Count; i++)

Затем я изменилоператор if для:

if (SeatNum.Rows[i][0].ToString() != (row.Cells[0].Value.ToString()))

Затем я удалил оператор break in Then и сохранил его в операторе else.

Спасибо.

UPTATE:

Лучшее решение, быстрее и логичнее

            DataTable SeatNum;
            List<int> SeatNums = (from row in SeatNum.AsEnumerable() select Convert.ToInt32(row["Num"])).ToList();
            bool OutOfRang = false; ;
            foreach (DataGridViewRow row in dataGridView2.Rows)
            {

                if (!row.IsNewRow)
                {
                    if (!SeatNums.ToList().Contains(Convert.ToInt32(row.Cells[0].Value)))
                    {
                        OutOfRang = true;
                        row.Cells[0].Style.BackColor = Color.Red;
                        MessageBox.Show("This Num ( " + row.Cells[0].Value.ToString() + " ) not in DataTable list");
                        countSeatsbr++;
                        row.ErrorText = "Not in DataTable list.";

                    }
                }
            }
            if (OutOfRang)
            {
                return;
            }
            else
            {
                DoSomethingElse()
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...