Вы можете группировать или сортировать элементы разными способами, заполняя listBox.
Я привел несколько примеров ниже.Это не обязательно самые удивительные решения, но я полагаю, что вы узнаете больше, увидев некоторые из возможностей, чем предоставив загадочное или «умное» решение.Они также иллюстрируют, как вы можете вставить в разных местах в списке (как упомянуто в вопросе).
Простой способ разделить один список на два (несортированные) списки, добавляя в конец или вставляя вначало списка (не очень эффективный подход, но часто это не будет актуальной проблемой в коде пользовательского интерфейса, если у вас нет больших списков):
foreach (string item in itemList)
{
if (item.Contains("FID"))
listbox.Items.Insert(0, item); // Add at start of list
else
listBox.Items.Add(item); // Add at end of list
}
(Обратите внимание, что элементы FID будут отображаться вобратный порядок)
Или добавьте элементы в два прохода:
foreach (string item in itemList)
{
if (item.Contains("FID"))
listbox.Items.Add(item) // Add all items with FID in them
}
foreach (string item in itemList)
{
if (!item.Contains("FID"))
listbox.Items.Add(item) // Add all items without FID in them
}
Или найдите место вставки для каждого элемента:
foreach (string item in itemList)
{
int insertPos = 0;
bool itemIsFID = item.Contains("FID");
while (insertPos < listBox.Items.Count)
{
// Primary sort - put FID items ahead of non-FID items
bool boxItemIsFID = listBox.Items[insertPos].Contains("FID");
if (itemIsFID && !boxItemIsFID)
{
// The new item must be inserted before the existing item
break;
}
// Secondary sort - alphabetical
if (item.CompareTo(listBox.Items[insertPos]) > 0)
{
// The new item must be inserted before the existing item
break;
}
}
// Insert the item at the location we've found
if (insertPos < listBox.Items.Count)
listBox.Items.Insert(insertPos, item);
else
listBox.Items.Add(item);
}
Или, наконец, вы можете предварительно-сортировать коллекцию предметов, внедрив свой собственный IComparer
и используя метод Sort
вашей коллекции:
itemList.Sort(MyComparer);
foreach (string item in itemList)
listbox.Items.Add(item);