Код подобен основному элементу, а ИдСуб подобен подэлементу основного. 1 основной пункт может иметь несколько подпунктов.
У меня есть этот код foreach в моем коде.
foreach (var subID in Ids)
{
Display display = new Display();
display.Code = item.Code;
display.Name = item.Name;
display.Price = item.Price;
display.IdSub = subID ;
DisplayList.Add(display);
}
Поскольку Идентификаторы имеет 3 субидентификатор, поэтому на выходе есть 3 строки данных. Я хочу, чтобы Код, Имя, Цена были такими же, как основной элемент. Я хочу, чтобы он объединился в 1 строку с несколькими ИдСуб. Как я могу объединить / объединить эти данные?
Затем вам нужно изменить поле/свойство IdSub
в вашем классе Display
на массив целых чисел: int[]
(вы можете сделать это по-другому, но это лучший подход IMO).
Затем вы можете опустить цикл:
Display display = new Display()
{
Code = item.Code,
Name = item.Name,
Price = item.Price,
IdSub = Ids //if Ids is array of ints, else you need to use ToArray() method
}
DisplayList.Add(display);
Чтобы отображать данные IdSub
с привязкой, вам нужно определить дополнительное свойство в вашем классе Display
:
public string IdSubDisplay
{
get
{
return string.Join(",", IdSub);
}
set { }
}
и привязать к IdSubDisplay
.
это дает ошибку для Ids
, так как Ids
это список, подобный этому List<int> Ids =...
@newbie Тогда определите IdSub
как List<int>
или напишите IdSub = Ids.ToArray()
сэр, я попробовал ваш подход, теперь ошибки нет, но мой вывод для Id Sub стал таким Int32[] Array
что пошло не так? он не отображал идентификатор сабвуфера
@newbie Как вы это показываете? Вы должны использовать метод string.Join
для отображения всех элементов в коллекции: string.Join(",", display.IdSub);
Я использовал Binding
вот так <ListBoxItem Content = "{Binding IdSub}"/>
где я должен поместить строку. присоединиться ?
Большое спасибо. Ты спас мне жизнь :)
У вас есть несколько вариантов сделать это. Вот один из самых простых:
foreach (var id in itemIds)
{
if (DisplayList.Any(x=> x.Code == item.Code && x.Name == item.Name && x.Price == item.Price))
{
var display = DisplayList.Single(x=> x.Code == item.Code && x.Name == item.Name && x.Price == item.Price);
display.IdSubs.Add(id);//change IdSub to IdSub, as a list of its previous type
}
else
{
Display display = new Display();
display.Code = item.Code;
display.Name = item.Name;
display.Price = item.Price;
display.IdSubs = new List<int>();//Assumed that IdSub was int
DisplayList.Add(display);
}
}
У меня есть несколько ошибок при использовании этого подхода. так как внутри моего itemIds
содержится только id
он не содержит ничего кроме этого.
itemIds
выглядит так: `List<int> itemIds =...`
Я внес правку в оператор if, проверьте, пожалуйста.
У меня здесь ошибка new List<int>();
там написано Cannot implicitly convert type 'System.Collections.Generic.List<int>' to 'int'
а тут display.IdSubs.Add(id);
сказано 'int' does not contain a definition for 'Add' and no accessible extension method 'Add' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)
измените IdSub
на IdSubs
, как список предыдущего типа. Если IdSub
было int
, IdSubs
будет List<int>
если я изменю его, будет ошибка, сказав что-то вроде display does not contains IdSubs
создайте новое свойство в классе Display
с именем IdSubs
и типом List<int>
.
Этот вопрос в основном точно такой же, как и этот: stackoverflow.com/questions/55565332/…