我想添加一个“选择一个”选项下拉列表绑定到列表<T>。

一旦我查询列表<T>,我如何添加我的初始项目,不是数据源的一部分,作为该列表<T>的第一个元素?我有:

// populate ti from data               
List<MyTypeItem> ti = MyTypeItem.GetTypeItems();    
//create initial entry    
MyTypeItem initialItem = new MyTypeItem();    
initialItem.TypeItem = "Select One";    
initialItem.TypeItemID = 0;
ti.Add(initialItem)  <!-- want this at the TOP!    
// then     
DropDownList1.DataSource = ti;

当前回答

使用列表< T >。插入

虽然与您的具体示例无关,但如果性能很重要,也可以考虑使用LinkedList<T>,因为将项插入到List<T>的开头需要将所有项移动。看看什么时候我应该使用List和LinkedList。

其他回答

使用List<T>的插入方法:

列表。插入方法(Int32, T):在List中指定的索引处插入一个元素。

var names = new List<string> { "John", "Anna", "Monica" };
names.Insert(0, "Micheal"); // Insert to the first element

从。net 4.7.1开始,你可以使用免费的Prepend()和Append()。输出将是一个IEnumerable。

// Creating an array of numbers
var ti = new List<int> { 1, 2, 3 };

// Prepend and Append any value of the same type
var results = ti.Prepend(0).Append(4);

// output is 0, 1, 2, 3, 4
Console.WriteLine(string.Join(", ", results));

编辑:

如果你想显式地改变给定的列表:

// Creating an array of numbers
var ti = new List<int> { 1, 2, 3 };

// mutating ti
ti = ti.Prepend(0).ToList();

但此时只需使用Insert(0,0)

使用Insert方法:

ti.Insert(0, initialItem);

使用列表< T >。插入

虽然与您的具体示例无关,但如果性能很重要,也可以考虑使用LinkedList<T>,因为将项插入到List<T>的开头需要将所有项移动。看看什么时候我应该使用List和LinkedList。

更新:一个更好的想法,设置“AppendDataBoundItems”属性为true,然后声明“选择项目”。数据绑定操作将添加到静态声明的项中。

<asp:DropDownList ID="ddl" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Value="0" Text="Please choose..."></asp:ListItem>
</asp:DropDownList>

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx

-爱信