Здравствуйте, задача такая, есть 2 таблицы excel, нужно их вывести в два листбокса, а в 3 по кнопке объединить, собственно, объединить их так, чтобы в первой колонке был id, название товара, цвет, размер и поставщик. По сути, нужно добавить колонку id их 2 таблицы в 1-ую таблицу, но проблема в том, что я что-то намудрила и оно соединяет не по тем id. Помогите, если не сложно.
Screenshot_2.jpg
Код:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Excel = Microsoft.Office.Interop.Excel;
namespace laba_3.Pages
{
/// <summary>
/// Логика взаимодействия для StartWindowPage.xaml
/// </summary>
public partial class StartWindowPage : Page
{
public List<Data1> objects = new List<Data1>();
public List<Data1> objects2 = new List<Data1>();
public List<Data3> objects3 = new List<Data3>();
public class DataD
{
public string nameOfMaterial { get; set; }
public string color { get; set; }
public string size { get; set; }
public string supplier { get; set; }
public int id { get; set; }
}
public class Data1
{
public string nameOfMaterial { get; set; }
public string color { get; set; }
public string size { get; set; }
public string supplier { get; set; }
public int id { get; set; }
}
public class Data2
{
public string nameOfMaterial { get; set; }
public int id { get; set; }
}
public class Data3
{
public string nameOfMaterial { get; set; }
public string color { get; set; }
public string size { get; set; }
public string supplier { get; set; }
public int id { get; set; }
}
public StartWindowPage()
{
InitializeComponent();
}
private void ExitButtonClick(object sender, RoutedEventArgs e)
{
Environment.Exit(0);
}
private void JoinListButtonClick(object sender, RoutedEventArgs e)
{
//ERR
var result = from pl in objects
join t in objects2 on pl.nameOfMaterial equals t.nameOfMaterial
select new { nameOfMaterial = pl.nameOfMaterial, id = t.id, color = pl.color, size = pl.size, supplier = pl.supplier };
//ERR
var result2 = objects.Join(objects2, // второй набор
p => p.nameOfMaterial, // свойство-селектор объекта из первого набора
t => t.nameOfMaterial, // свойство-селектор объекта из второго набора
(p, t) => new { nameOfMaterial = p.nameOfMaterial, id = t.id, color = p.color, size = p.size, supplier = p.supplier });
foreach (var item in result)
{
ListBox33.Items.Add(item.nameOfMaterial.ToString());
ListBox33.Items.Add(item.id.ToString());
ListBox33.Items.Add(item.color.ToString());
ListBox33.Items.Add(item.size.ToString());
ListBox33.Items.Add(item.supplier.ToString());
}
}
private void ViewListsButtonClick(object sender, RoutedEventArgs e)
{
Excel.Application excelApp = new Excel.Application();
excelApp.Visible = false; // Отвечает за то, будет ли видимо приложен
string path = @"E:\laba_3\laba_3\excelTables\book1.xlsx";
excelApp.Workbooks.Open(path);
int row = 2;
ArrayList maping = new ArrayList();
Excel.Worksheet currentSheet = (Excel.Worksheet)excelApp.Workbooks[1].Worksheets[1];
while (currentSheet.get_Range("A" + row).Value2 != null)
{
for (char column = 'A'; column < 'E'; column++)
{
Excel.Range cell = currentSheet.get_Range(column.ToString() + row.ToString());
maping.Add(cell != null ? cell.Value2.ToString() : "");
}
row++;
}
excelApp.Quit();
Excel.Application excelApp2 = new Excel.Application();
excelApp2.Visible = false; // Отвечает за то, будет ли видимо приложен
string path22 = @"E:\laba_3\laba_3\excelTables\book2.xlsx";
excelApp2.Workbooks.Open(path22);
int row2 = 2;
ArrayList maping2 = new ArrayList();
Excel.Worksheet currentSheet2 = (Excel.Worksheet)excelApp2.Workbooks[1].Worksheets[1];
while (currentSheet2.get_Range("A" + row2).Value2 != null)
{
for (char column = 'A'; column < 'C'; column++)
{
Excel.Range cell = currentSheet2.get_Range(column.ToString() + row2.ToString());
maping2.Add(cell != null ? cell.Value2.ToString() : "");
}
row2++;
}
excelApp2.Quit();
for (int counter = 0; counter < maping.Count; counter += 4)
{
objects.Add(new Data1
{
nameOfMaterial = maping[counter].ToString(),
color = maping[counter + 1].ToString(),
size = maping[counter + 2].ToString(),
supplier = maping[counter + 3].ToString()
});
}
for (int counter = 0; counter < maping2.Count; counter += 2)
{
objects2.Add(new Data1
{
nameOfMaterial = maping2[counter].ToString(),
id = Convert.ToInt32(maping2[counter + 1])
});
}
foreach (var item in objects)
{
ListBox3.Items.Add(item.nameOfMaterial.ToString());
ListBox3.Items.Add(item.color.ToString());
ListBox3.Items.Add(item.size.ToString());
ListBox3.Items.Add(item.supplier.ToString());
}
foreach (var item in objects2)
{
ListBox2.Items.Add(item.nameOfMaterial.ToString());
ListBox2.Items.Add(item.id.ToString());
}
}
}
}