Member 12457690 Ответов: 2

Как сравнить два datatgridviews и получить разницу в datagridview3 ?


DataGridView1 has list of software in Column Installed_Software, and 
DataGridView2 has a list of Installed_Software. I want DataGridView2 Installed_Software Column Compared to DataGridView1 Installed_Software Column,
and what Installed_Software DataGridView2 has that DataGridView1 does not have, I want Displayed in DataGridView3. If no Difference between the DGV1 and DGV2, then have MessageBox say something like Match.


Что я уже пробовал:

Ниже показано, как DataGridViews 1 и 2 заполняются столбцами Domain_User, Installed_Software:

dgv1 = DataGridView1 and dgv2 = DataGridView2 in the Code below.
  
 con = new SqlConnection();
            con.ConnectionString = @"Data Source=STACYWLENOVO; Initial Catalog=SoftwareHardwareTracking; Integrated Security=TRUE";

            con.Open();
            adp = new SqlDataAdapter("select Domain_User, Installed_Software from tblBkupSoftwareCount", con);
            ds1 = new System.Data.DataSet();
            adp.Fill(ds1, "Client Details");
            dgv2.DataSource = ds1.Tables[0];
            // https://stackoverflow.com/questions/8983277/how-to-convert-dataset-to-datatable
            //Code below to get dataset into DataTable dt2
            DataTable dt2 = ds1.Tables[0];
            con.Close();


            //Code pulling tblSoftwareCount
            conn = new SqlConnection();
            conn.ConnectionString = @"Data Source=STACYWLENOVO; Initial Catalog=SoftwareHardwareTracking; Integrated Security=TRUE";

            conn.Open();
            adap = new SqlDataAdapter("select Domain_User, Installed_Software from tblSoftwareCount", conn);
            ds = new System.Data.DataSet();
            adap.Fill(ds, "Client Details");
            dgv1.DataSource = ds.Tables[0];
            //https://stackoverflow.com/questions/8983277/how-to-convert-dataset-to-datatable
            //Code below to get dataset into DataTable dt1
            DataTable dt1 = ds.Tables[0];
            conn.Close();


            dt3 = (dt1, dt2);

              if (dt.Rows.Count == 0)
                 
                    MessageBox.Show("Equal");
               else

              MessageBox.Show("Not Equal");

Karthik_Mahalingam

есть ли у пользователя несколько программ ?

Member 12457690

DataGridView1 имеет список программного обеспечения в столбце Installed_Software, а также
DataGridView2 имеет список установленного программного обеспечения. Мне нужен столбец DataGridView2 Installed_Software по сравнению с столбцом DataGridView1 Installed_Software,
и то, что Installed_Software DataGridView2 имеет то, чего нет у DataGridView1, я хочу отобразить в DataGridView3. Если нет разницы между DGV1 и DGV2, то пусть MessageBox скажет что-то вроде Match. Мне нужна проверка значений по имени, а не количество необходимых строк. Например, DGV1 Installed_Software = MS Office 2010 и DGV2 Installed_Software = MS Office 2013, Если DGV1 не имеет его, то DGV3 должен иметь его хранилище, чтобы отразить разницу в Installed_Software между DGV1 и DGV2. Спасибо. Я действительно пытаюсь понять это. Мы ценим вашу помощь.

Karthik_Mahalingam

проверьте решение

2 Ответов

Рейтинг:
9

Karthik_Mahalingam

пробовать

DataTable dt1 =  // get from tblBkupSoftwareCount
DataTable dt2 =  // get from tblSoftwareCount

DataTable dtDifference = new DataTable();
dtDifference.Columns.Add("Domain_User");
dtDifference.Columns.Add("Installed_Software");

var list1 = dt1.AsEnumerable().Select(k => (new { user = k["Domain_User"].ToString(), sw = k["Installed_Software"].ToString() })).ToList();
var list2 = dt2.AsEnumerable().Select(k => (new { user = k["Domain_User"].ToString(), sw = k["Installed_Software"].ToString() })).ToList();
list1.AddRange(list2);


var diff = list1.GroupBy(k => new { Domain_User = k.user, Installed_Software = k.sw }).Where(k => k.Count() == 1).ToList();
diff.ForEach(k => { dtDifference.Rows.Add(k.Key.Domain_User, k.Key.Installed_Software); });
// dt3 has the difference
datagridview3.datasource = dtDifference;


Рейтинг:
1

RickZeeland

Как вы используете объект DataTable, вы можете попробовать DataTable.AsEnumerable().Except()
Смотрите пример здесь: Сравнение данных с использованием LINQ Except, Intersect и Union : www.dotnetmentors.com[^]


Maciej Los

5! Главное-сравнивать данные, а не их строковое представление.