2014-09-19 3 views
0

У меня есть windows forms проект и список типа DateTime, который я хочу связать в combobox. Я хочу, чтобы в верхней части поля со списком был текст All. Как это сделать ?Top Item On Combo Box

List<DateTime> dueDates = manager.GetUniqueDueDates(); 
cbDates.DataSource = dueDates; 

Например

All 
1/1/2001 
1/1/2002 
1/1/2003 
+1

Самый простой способ можно было бы добавить это ваш источник данных как первый элемент – erem

ответ

0

вам нужно получить список dueDtes как строки, так как «Все» строка, которую мы не можем добавить в список Datetime.

List<string> dueDates = manager.GetUniqueDueDates(); 

в GetUniqueDueDates функции вы должны добавить «Все»

public List<string> GetUniqueDueDates() 
{ 
List<string> uniqueDate=new List<string>(); 
uniqueDate.add("All"); 

//Rest of your code 


} 
1

Вы можете использовать метод вставки свойства элементов, чтобы добавить дополнительный пункт.

cbDates.Items.Insert(0, "All"); 

Таким образом, ваш источник данных не обязательно должен быть списком строк.

Update

Как отметил @Hassan Нисар в комментариях, он не будет работать, если вы связываете источника данных, но вы можете добавить элементы с помощью цикла (см ответа @Hassan Nisar для примера).

+0

Работает ли он после того, как вы привязываете combobox к источнику данных? – Hassan

+0

Я получаю Argument Exception 'Коллекция элементов не может быть изменена, когда установлено свойство DataSource.' – Hassan

+0

@HassanNisar Да, вы правы, я обновлю ответ. – VahidNaderi

0

Поскольку ваш список имеет тип DateTime, вы должны сначала сделать его в список, чтобы заставить его работать, когда вы добавляете «Все»

List<string> dueDates = new List<string>(); 
dueDates.Add("All"); 
dueDates.Add(new DateTime(2001,03,01).ToString()); 
dueDates.Add(new DateTime(2002, 04, 01).ToString()); 
dueDates.Add(new DateTime(2003, 05, 01).ToString()); 
cbDates.DataSource = dueDates; 
+0

типа 'DateTime' (typo), также может быть полезно сохранить источник как' object', поэтому вы всегда можете просто использовать 'Items.OfType ()' для повторного получения дат – Sayse

1

После связывания с List<DateTime> вы не можете вставить элемент.

исключение

Аргумент будет поднят Items collection cannot be modified when the DataSource property is set.

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

List<DateTime> dueDates = manager.GetUniqueDueDates(); 
//cbDates.DataSource = dueDates; 

foreach (var date in dueDates) 
    cbDates.Items.Add(date) 

cbDates.Items.Insert(0, "All"); 
+0

Я сделал это, но я получаю Items коллекция не может быть изменена, если установлено свойство DataSource. Я не установил свойство datasource. – theChampion

+0

Используйте цикл foreach, как указано в ответе. Не связывайте поле со списком с источником данных. Просто перебирайте список. Перед добавлением элементов убедитесь, что вы удаляете предыдущие элементы. – Hassan

0

Try отсортировать все элементы после добавления другого 1, так как его все DATETIME после Все. Что-то вроде:

например: было предположить, чтобы быть вашим DATASOURCE:

comboBox1.Items.AddRange(a.OrderBy(c => c).ToArray()); 

и свойство верно, прежде чем что-нибудь еще:

comboBox1.Sorted = true;