2009-10-09 41 views
3

我有一個Linq從DB中給出的項目列表。 現在我用這個列表填充一個ComboBox。如何在由linq填充的組合框中插入空行?

我怎麼能得到它的空行?

我的問題是,在列表中的值不允許爲空,所以我不能輕鬆添加一個新的空項目。

回答

3

你可以嘗試這樣做:

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

我已經成功的另一位爲創建一個空的項目,並在我的數據源的開頭插入它之前,我綁定到下拉列表。

+0

需要設置AppendDataBoundItems =「True」。檢查@Rajapandiyan JJ回答 – 2014-04-01 06:33:57

+0

只有當您在數據綁定之前插入項目。您可以在數據綁定後面插入項目,而無需將AppendDataBoundItems設置爲True。 – 2014-04-01 14:05:52

+0

不,它不起作用。但是,在數據綁定後將數據插入到Listitemcollections中的第0個位置將替換第0個位置處的現有數據。 – 2014-04-01 14:45:15

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()); 

甚至更​​好,寫一個前置方法:

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#頁

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

始終設置AppendDataBoundItems="True"因爲AppendDataBoundItems屬性允許數據綁定發生前項添加到列表控件對象。數據綁定後,項目集合包含數據源中的項目和以前添加的項目。