格式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"));