Как установить выпадающий список DataTextField для отображения двух полей свойств данных?

У меня есть раскрывающийся список, который заполняется данными в коде позади. Атрибут DataTextField задается следующим кодом:

ddlItems.DataTextField = "ItemName";

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

ddlItems.DataTextField = "ItemName" + "ItemDescription";

Какой код мне нужно использовать для этого?

Ответ 1

Вы можете использовать событие форматирования ddlItems, которое позволит вам установить логику для преобразования определенного элемента в строку или, если это имеет смысл использовать в вашей программе, иметь свойство, подобное представлениюString, которое возвращает Name + Desc и привязаны к этому свойству.

Аналогичный вопрос с большим количеством ответов и примеров кода: Формат DropDownList.TextValue

Ответ 2

Вы можете использовать LinqToSql для создания нового источника данных, содержащего поле отображения, которое отформатировано так, как вы хотите:

var datasource = from x in products
                 select new {
                     x.Id,
                     x.Code,
                     x.Description,
                     DisplayField = String.Format("{0} ({1})", x.Code, x.Description)
                 };

comboBox.DataSource = datasource;
comboBox.DataValueField = "Id";
comboBox.DataTextField = "DisplayField";
comboBox.DataBind();

Ответ 3

Я достиг этого раньше, но я сделал это с помощью telerik radcombobox (который мог включать шаблон элемента). Шаблон был просто html-таблицей, и я, казалось бы, "конкатенировал" два поля. Я уверен, что стандартный элемент управления asp.net не имеет этой функции, но если вы посмотрите вокруг, вы найдете сторонний элемент управления, который будет.

Конечно, можно справиться с этой конкатенацией на бизнес-уровне и определить новый тип (вероятно, структура), с свойством, которое содержит два поля в виде одной строки.

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

Ответ 4

Я сделал что-то похожее на это двумя способами: либо на С#, либо на SQL.

Matteo Gaggiano ниже дает хороший пример метода С#:

dataTable.Columns.Add(new DataColumn("Title", System.Type.GetType("System.String"), "ItemName + ' - ' + ItemDescription"));

ddlItems.DataSource = dataTable;
ddlItems.DataTextField = "Title";
ddlItems.DataValueField = "Id";
ddlItems.DataBind();

Или это можно сделать в SQL:

SELECT ItemName + ' - ' + ItemDescription AS Title FROM yourSQLtable

а затем используя последние четыре строки выше в коде С#.

Ответ 5

Самый простой способ - в .aspx файле:

<asp:DropDownList ID="ddlItems" runat="server" DataSourceID="YourDataSource" DataTextField='<%# Eval("Id")+" - "+Eval("Title") %>' ..... />

Надеюсь, что полезно.

Ответ 6

Если вы кодируете код сущности, сначала можете создать новое поле с именем NameAndDescription и установить ddlItems.DataTextField = "NameAndDescription". Поле может быть создано следующим образом:

    public String NameAndDescription
    {
        get { return this.ItemName + this.ItemDescription; }
    }

Ответ 7

Попробуйте следующее:

select std.Student_ID,std.Student_Name+' - '+ std.Admission_ID Student_Name 
from Student_tbl std , School_tbl sch 
where sch.School_ID = '" + School_ID + "' and std.Current_Class = '" + Class_ID + "' 
      and std.Section_ID = '" + Section_ID + "'

DL_Student.DataTextField = "Student_Name";
DL_Student.DataValueField = "Student_ID";

Ответ 8

Начиная с комментария Формат DropDownList.TextValue Я узнал о DataColumn.Expression(DataColumn.Expression Property, так что это может быть корректное решение (в моем случае это было идеально):

DataColumn title = new DataColumn();
title.ColumnName = "Title";
title.DataType = System.Type.GetType("System.String");
title.Expression = "ItemName + ' - ' + ItemDescription";
dataTable.Columns.Add(title);

// Or in one line

dataTable.Columns.Add(new DataColumn("Title", System.Type.GetType("System.String"), "ItemName + ' - ' + ItemDescription"));

ddlItems.DataSource = dataTable;
ddlItems.DataTextField = "Title";
ddlItems.DataValueField = "Id";
ddlItems.DataBind();

Ответ 9

Для меня работал следующий код:

select id, ItemName + ' - ' + ItemDescription as 'yournamecolumn' from `yourtable`
ddlItems.DataTextField = "yournamecolumn";
ddlItems.DataValueField = "id";
ddlItems.DataBind();