Формат Dropdownlist Для.Текст значение

моя хранимая процедура выглядит так

SELECT Id, StudentName
FROM xyz

у меня есть выпадающий список в asp.net, который я загружаю как:

ddlA.DataSource = // Some source
ddlA.DataTextField = "Id" + " -" + "StudentName";
ddlA.DataValueField = "Id";
ddlA.DataBind();
ddlA.Items.Insert(0, new ListItem(" Select one", "0"));

а в Databind() заявление, я получаю эту ошибку:

7 ответов


DropDownList1.DataTextFormatString = "{0} - {1}";
DropDownList1.DataTextField = "Id,StudentName";

кажется, что это не достижимо автоматически, например, см. этот билет MS Connect.


таким образом, сделайте это программно:

foreach (var row in table.Rows)
{
    row.Field<string>("text") = String.Format(..);
}

или

foreach (var item in data)
{
    new ListItem { Text = String.Format(..); }; 
}

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

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();

вы можете достичь этого, следуя коду

dsStudent.Tables[0].Columns.Add("IdWithStudenName",typeof(string),"Id + ' - ' + StudenName");
DropDownList1.DataSource = dsStudent;
DropDownList1.DataTextField = "IdWithStudenName";
DropDownList1.DataBind();
DropDownList1.Items.Insert(0, new ListItem("Please select"));

для большего понимания обратитесь здесь.


если источник данных является DataTable, вы можете добавить "выражение" (вычисляемый столбец) в таблицу. Выражение для нового столбца будет выглядеть следующим образом:

newcolumn.Expression = "Id + ' - ' + StudentName";

вы можете изменить хранимую процедуру на:

SELECT Id, Id + " - " StudentName as Text FROM xyz

и измените привязку на:

ddlA.DataSource = // Some source
ddlA.DataTextField = "Text"
ddlA.DataValueField = "Id";     
ddlA.DataBind();     
ddlA.Items.Insert(0, new ListItem(" Select one", "0")); 

Если у вас есть список классов для заполнения выпадающего списка, это, вероятно, лучше всего сделать;

List<FOO> foo = new List<FOO>();

ddlFoo.DataSource = foo.Select(x => 
    new ListItem { Text = x.Text1 + " - " + x.Text2, Value = x.Id.ToString() });
ddlFoo.DataBind(); 

это очень просто, только у вас есть поля concat в запросе

SELECT Id ,Id || ' ' || StudentName ""TEXT"", 
FROM xyz

затем вы создаете выпадающий список

ddlA.DataSource = // Some source
ddlA.DataTextField = "TEXT";
ddlA.DataValueField = "Id";
ddlA.DataBind();
ddlA.Items.Insert(0, new ListItem(" Select one", "0"));