Сравнение двух datagridview

У меня есть два представления данных в одной форме. Первый, datagridview1, имеет столбцы и данные:

name   IC              EMAIL             TELEPHONE  
------------------------------------------------------
rOO    898989096677    [email protected]      018-9097878

datagridview2 есть

name   IC              EMAIL           TELEPHONE      ID 
-----------------------------------------------------------
rOO    898989096677    [email protected]    018-9097878    8787

Я хотел бы попросить помощи в том, как сравнить два представления сетки данных, как вы можете видеть на рисунке. Я хотел бы сравнить четыре столбца из одного представления сетки данных с другим представлением сетки данных и посмотреть, совпадают ли какие-либо результаты. Например, совпадает ли имя roo с другим представлением данных, я хочу, чтобы значение в идентификаторе (8787) было отправлено в другое представление сетки данных.


person Kaswin Singh    schedule 02.10.2012    source источник
comment
В чем конкретно проблема? Вы знаете, как получить доступ к значениям, содержащимся в ячейках? Вы умеете сравнивать ценности? Вы умеете устанавливать значения?   -  person TheBlastOne    schedule 02.10.2012
comment
Если оба datagridviews указывают на один и тот же источник данных, он должен быть синхронизирован. Лучше описать ваше требование с точки зрения пользователя.   -  person ray    schedule 02.10.2012


Ответы (3)


есть очень простое решение для сравнения двух datagridview и отображения их результата в третьем.

        for (int i = 0; i < dtView1.Rows.Count; i++)
        {
            for (int j = 1; j < dtView1.Columns.Count; j++)
            {

                if ((dtView1.Rows[i][j]) == (dtView2.Rows[i][j]))
                {
                   // here you can add your own logic
                }
                else
                {
              // here you can add your own logic
            }
        }

|

person Steve    schedule 17.03.2015

Предположим, что вы заполняете обе сетки данных одними и теми же объектами, содержащими эти 4 свойства из вашего примера. Вы должны проверить выбранную строку из первой сетки данных, если во второй сетке данных есть соответствующий объект на основе ваших фильтров. Используйте Линк. Если да, то скопируйте данные из выбранного элемента из первой сетки данных в соответствующий элемент из секунд. Я боюсь, что вам придется проделать все эти шаги вручную, потому что не существует метода, который может сравнить две сетки данных, и вы просто устанавливаете некоторые фильтры, и работа сделана. Вам придется немного поработать, но это не сложно. Удачи.

person Alexandru Dicu    schedule 02.10.2012

Ответ Стива работает неправильно и не будет компилироваться.

Вот мое решение:

        int x = 0;
        int y = 0;
        int i = -1;
        int z = 0;
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                    i++;

                if ((dataGridView1.Rows[i].Cells[i].Value) == (dataGridView2.Rows[z].Cells[i].Value))
                {
                    x++;
                }
                else
                {
                    y++;
                }
            if (z < dataGridView2.Rows.Count)
            {
                z++;
            }
            if(z == dataGridView2.Rows.Count)
            {
                z--; //subtract 1 from the total count because the datagrid is 0 index based.
            }

     MessageBox.Show("Matched: " + x.ToString() + "\r\n" + "Not Matched: " + y.ToString());

Цикл foreach в сетке данных будет проходить по каждой строке, после чего вы можете выбрать ячейку или даже ячейки для сравнения. Этот код немного длинный, и я уверен, что его можно упростить, однако он выполняет свою работу.

В настоящее время это будет проверять каждую строку из сетки данных 2 на соответствие в сетке данных 2 только в одном столбце.

Его импорт, чтобы помнить, что сетка данных основана на индексе 0. Свойство Count таблицы данных дает количество на основе индекса [1], поэтому нам нужно вычесть последнюю итерацию в таблице данных 2.

person Ryan Dooley    schedule 27.01.2017