2015-06-14 1 views
-1

У меня проблема: я хочу показать элементы в ComboBox, поскольку они классифицируются. Как показано на рисунке:Как добавить элементы в ComboBox как список деревьев

enter image description here

У меня есть два атрибута в моей таблице, один vendorID, другой vendorType. Я хочу показать эти типы поставщиков в ComboBox

Как я должен это делать?

+0

Вы используете Winforms/WPF/ASP ..? Всегда указывайте свой вопрос с соответствующей целью? Если вы можете использовать шрифт фиксированного размера, вы можете использовать префикс с несколькими пробелами для создания эффекта. Вы должны были бы удалить их, конечно, при их использовании и т. Д. Если это не вариант, вам нужно будет провести рисование элементов. Не очень тяжело, просто убедитесь, что у вас есть уровень завершенности, возможно, в тегах элементов. – TaW

+0

элементы добавляются динамически и сохраняются/извлекаются из базы данных, приложение формы окна –

+0

Это не будет иметь большого значения , Начните с добавления уровней в теги и, конечно же, получив правильный порядок! – TaW

ответ

1

ComboBox Элементы содержат объекты, которые довольно тупые.

Первое, что вы должны сделать, это создать class, может быть, как это:

class ComboItem 
{ 
    public string Text { get; set; } 
    public int Level { get; set; } 
    public ComboItem (string text, int level) 
    { Text = text; Level = level;  } 
    public override string ToString() 
    { 
     return "".PadLeft(Level) + Text; 
    } 
} 

Когда вы добавляете их, не просто добавить строку, но экземпляры нового класса:

for (int i = 0; i< 12; i++) 
{ 
    comboBox1.Items.Add(new ComboItem("Item" + i, i%3)); 
} 

Это все; трюк состоял в том, чтобы добавить несколько пробелов в переопределение ToString.

Вы, конечно, вытащите текст из базы данных. И это зависит от вас, чтобы обеспечить уровень каждой записи!

Вот как результат выглядит, с Consolas как Font:

enter image description here

Если вы хотите использовать владелец рисования для более утонченного внешнего вида, что это не очень трудно либо. Но сначала сначала: получите данные уровня вместе с текстом.

Если вы можете вытащить их из SQL, это было бы, вероятно, лучшим. В противном случае вам придется перебирать ваши данные, чтобы сделать небольшую группировку/подсчет.

+0

Мне нужно получить данные из SQL, чем использовать дополнительное поле в таблице, в которой хранится уровень. –

+0

Да, но ничего не знаю о ваших данных и макете db, я не могу с этим поделать. – TaW

+0

ничего, кроме, у меня есть два атрибута в моей таблице, один - vendorID, другой - vendorType. Я хочу показать эти типы поставщиков в comobobox, Теперь, что вы делаете, как я должен поддерживать уровень для размещения в нем предметов, как упомянуто в вашем решении. –

0

Хотя я не могу получить доступ к Dropbox, потому что ПК компании предотвращает это ха-ха. Если я правильно понимаю, то тогда есть простой способ организовать элементы. Самый простой способ - присвоить им номера (ID) или поле приоритета или организовать их так, как вы хотите в БД, и вытащить из него. Убедитесь, что все автосохранение в списке не установлено.