2009-10-09 3 views
3

У меня есть список предметов, данных Linq из БД. Теперь я заполнил ComboBox этим списком.Как вставить пустую строку в поле со списком, заполненное linq?

Как я могу получить пустую строку?

Моя проблема в том, что в списке значениям не разрешено быть NULL, поэтому я не могу легко добавить новый пустой элемент.

ответ

3

Вы можете попробовать сделать это:

Dropdown.Items.Insert(0, String.Empty) 

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

+0

Необходимо установить AppendDataBoundItems = "True". Проверьте @Rajapandiyan JJ answer –

+0

Только в том случае, если вы вставляете элемент перед вашей привязкой к данным. Вы можете вставлять элементы после привязки данных без установки параметра AppendDataBoundItems в значение True. –

+0

Нет. Это не работает. Однако вставка данных в 0-ю позицию в списке Listitemcollections после привязки данных заменит существующие данные на 0-й позиции. –

5

Вы можете использовать Concat() для добавления ваших реальных данных после статического элемента. Вам нужно сделать последовательность пустого элемента, который вы можете сделать с Enumerable.Repeat():

list.DataSource = Enumerable.Repeat(new Entity(), 1) 
       .Concat(GetEntitiesFromDB()); 

Или, определив простой метод расширения (в теории множеств синглтона представляет собой набор с 1 мощностью):

public IEnumerable<T> AsSingleton<T>(this T @this) 
{ 
    yield return @this; 
} 

// ... 
list.DataSource = new Entity().AsSingleton().Concat(GetEntitiesFromDB()); 

Или еще лучше, написать метод PREPEND:

public IEnumerable<T> Prepend<T>(this IEnumerable<T> source, params T[] args) 
{ 
    return args.Concat(source); 
} 


// ... 
list.DataSource = GetEntitiesFromDB().Prepend(new Entity()); 
1

страницы ASPX

<asp:DropDownList ID="DDL" runat="server" AppendDataBoundItems="True">       
    <asp:ListItem Selected="True" Value="0" Text=""></asp:ListItem> 
</asp:DropDownList> 

C# Page

Dropdown.Items.Insert(0, "");

Всегда Set AppendDataBoundItems="True" потому что AppendDataBoundItems свойство позволяет добавлять элементы к объекту ListControl перед привязкой данных происходит. После привязки данных коллекция элементов содержит как элементы из источника данных, так и ранее добавленные элементы.

Смежные вопросы