将数组和一个对象绑定到下拉列表中

3

我有一个类型为Person的数组,其中包含字符串对象:FirstName,LastName,login。

我将其绑定到一个下拉列表中。

现在,除了这个数组之外,我还想显示一个名为“Desk”的项目。我该怎么做?

我的当前代码是:

Person[] traders = GetTraders();
ddl_trader.Items.Clear();
ddl_trader.DataSource = traders;
ddl_trader.DataTextField = "LastName";
ddl_trader.DataValueField = "Login";
ddl_trader.DataBind();

我希望我添加的一个额外项目成为默认选中项。

"Desk" 是什么?是 Person 的属性吗?还是一个带有指向 Person 的链接的独立对象? - Matthieu
一个独立的字符串。它不是Person类型。 - Ayush
2个回答

3

您可以将AppendDataBoundItems属性设置为true(默认情况下为false),然后手动添加您的项目,最后执行数据绑定过程以添加其余项目。 AppendDataBoundItems确定在数据绑定期间列表是否被清除。

ddl_trader.Items.Clear();
ddl_trader.AppendDataBoundItems = true;
ddl_trader.Items.Add("Desk");
ddl_trader.DataTextField = "LastName";
ddl_trader.DataValueField = "Login";
ddl_trader.DataSource = traders;
ddl_trader.DataBind();

如果您需要在绑定列表后添加新项目,可以执行以下操作:
ddl_trader.Items.Insert(0, "Desk");

这不需要将AppendDataBoundItems设置为true


1

一种方法是将GetTraders()的结果加载到List<Person>中。然后,您可以在绑定到下拉列表之前向列表添加一个或多个新的Person对象。

List<Person> traders = new List<Person>(GetTraders());
traders.Add(new Person() { LastName = "Foo", Login = "Bar" });
ddl_trader.DataSource = traders;

你也可以定义一个额外的数组,并将其连接到结果中,而不是创建一个组合集合。(注意:这将是两个不同的数组作为单个序列处理,但支持数组仍将是分离的)。
Person[] traders = GetTraders();
Person[] moreTraders = new Person[] { new Person() { LastName = "Foo", Login = "Bar" } };
ddl_trader.DataSource = traders.Concat(moreTraders);

我在想是否可以在不将其添加到列表中的情况下完成。因为它只是一个字符串“Desk”,不需要名字、姓氏等信息。 - Ayush
明白了。如果我找不到不创建另一个Person类数组的方法,我会使用你的第二种方法。 - Ayush
由于某种原因,traders.Concat返回一个错误。我需要使用哪些程序集或引用来使用Concat? - Ayush
@xbonez,这是.NET 3.5+,C# 3.0+中IEnumerable<T>的扩展方法。如果您使用兼容平台(例如:Visual Studio 2008或2010),则需要在代码后台引用System.Core.dll并添加“using System.Linq;”语句。如果您使用较早版本的.NET,请尝试第一种方法(VS 2005+,“using System.Collections.Generic;”)。 - Anthony Pegram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接