连接下拉列表中显示的两个字段

时间:2010-05-26 20:29:42

标签: c# drop-down-menu

我正在尝试连接列表中的两个字段以显示在下拉列表中。 下面是我想要使用的代码。我不想改变我的产品模型,所以我试图做下面这样的事情,但是如果没有用连接的字段构建我自己的对象,我就无法解决任何问题。

            skuDropDown.DataSource = List<product>
            skuDropDown.DataTextField = "ProductId" // want to combine with"Description";
            skuDropDown.DataValueField = "ProductId";
            skuDropDown.DataBind();

感谢任何想法都会有所帮助。

6 个答案:

答案 0 :(得分:27)

要使用给定方法分配源代码,我将使用LINQ创建具有所需属性的匿名类型。像

这样的东西
List<Product> products = new List<Product>();
products.Add(new Product() { ProductId = 1, Description = "Foo" });
products.Add(new Product() { ProductId = 2, Description = "Bar" });

var productQuery = products.Select(p => new { ProductId = p.ProductId, DisplayText = p.ProductId.ToString() + " " + p.Description });

skuDropDown.DataSource = productQuery;
skuDropDown.DataValueField = "ProductId";
skuDropDown.DataTextField = "DisplayText";
skuDropDown.DataBind();

答案 1 :(得分:5)

如果您有一个代表产品的类,只需创建一个扩展您的类并将其返回的属性,例如:

        public string ID_Description {
            get 
            {
               return string.Format("{0} ({1})", Name, ProductId);
            }
        }

并在您的数据绑定下拉列表中引用您的属性

skuDropDown.DataSource = productQuery;     
skuDropDown.DataValueField = "ProductId";     
skuDropDown.DataTextField = "ID_Description";     
skuDropDown.DataBind(); 

答案 2 :(得分:1)

你可以这样做:

List<Product>.ForEach(
  x => skuDropDown.Items.Add(
    new Item(x.ProductId + " " x.ProductDescription, x.ProductId)
 );

只需遍历列表并将每个项目添加到下拉列表中。这就是.net将在你的例子中为你做的幕后工作。

答案 3 :(得分:0)

创建一个扩展产品的新类,将List内容强制转换为扩展类,该类包含一个新属性,该属性返回ProductID和Description的连接值。

我认为这应该适用于OTOMH。

我知道您不想更改产品结构,这就是我建议制作扩展课程的原因。但是,如果没有将它绑定到对象的一个​​区域,它就不可能。

答案 4 :(得分:0)

不幸的是,如果您正在使用数据绑定,则DataTextField必须是数据源上字段的名称。

您可以做的一件事是在绑定它们并修改其Text属性后迭代下拉列表中的项目。唯一要做的是将连接字段添加到数据对象中。

答案 5 :(得分:0)

您需要做的只是覆盖产品的.ToString()方法。

public override string ToString()
{
    return ProductID + " " + ProductDescription;
}

然后你需要做的就是绑定到下拉列表。根据我的理解,下拉标签将绑定到它所绑定的集合中的对象的tostring()。

换句话说,就这样做。

List<Product> products = new List<Product>();     
products.Add(new Product() { ProductId = 1, Description = "Foo" });     
products.Add(new Product() { ProductId = 2, Description = "Bar" });     

var productQuery = products.Select(p => new { ProductId = p.ProductId, DisplayText =   p.ProductId.ToString() + " " + p.Description });     

skuDropDown.DataSource = productQuery;     
skuDropDown.DataBind();