格式DropDownList.TextValue

我的存储过程是这样的

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()语句中,我收到此错误:

System.Web.HttpException:DataBinding:’System.Data.DataRowView’不包含名为’Id-StudentName’的属性。

在下拉列表的文本部分中,我想显示Id - StudentName的连接值。

我该怎么做?

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

它似乎无法自动实现,例如,请参阅此MS Connect票证 。


这样以编程方式执行:

 foreach (var row in table.Rows) { row.Field("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")); 

有关更多信息,请参阅此处

如果DataSource是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 = new List(); 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"));