Как установить выпадающий список 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();