Свяжите два поля для отображения в выпадающем списке

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

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

Спасибо любые идеи поможет.

15
задан Locke12 26 May 2010 в 20:29
поделиться

5 ответов

Чтобы назначить источник с заданным методом, я бы использовал 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();
28
ответ дан 1 December 2019 в 01:38
поделиться

Создайте новый класс, который расширяет продукт, преобразуйте содержимое списка в расширенный класс, который содержит новое свойство, которое возвращает объединенные значения ProductID и Description.

Я думаю, что это должно работать ОТОМХ.

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

0
ответ дан 1 December 2019 в 01:38
поделиться

Вы можете сделать следующее:

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

Просто пройдитесь циклом по списку и добавьте каждый элемент в выпадающий список. Это то, что .net сделает для вас за кулисами в вашем примере.

1
ответ дан 1 December 2019 в 01:38
поделиться

К сожалению, если вы используете привязку к базе данных, DataTextField должно быть именем поля в вашем источнике данных.

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

0
ответ дан 1 December 2019 в 01:38
поделиться

Все, что вам нужно сделать, это переопределить метод .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();  
0
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: