格式DropDownList.TextValue

Zer*_*ity 10 .net c# asp.net drop-down-menu

我的存储过程是这样的

SELECT Id, StudentName
FROM xyz
Run Code Online (Sandbox Code Playgroud)

我在asp.net中有一个下拉列表,我将其加载为:

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

但在Databind()声明中,我收到此错误:

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

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

我该怎么做?

小智 15

您可以使用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();
Run Code Online (Sandbox Code Playgroud)


aba*_*hev 14

DropDownList1.DataTextFormatString = "{0} - {1}";
DropDownList1.DataTextField = "Id,StudentName";
Run Code Online (Sandbox Code Playgroud)

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


这样以编程方式执行:

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

要么

foreach (var item in data)
{
    new ListItem { Text = String.Format(..); }; 
}
Run Code Online (Sandbox Code Playgroud)

  • 我在数据绑定中收到此错误"DataBinding:'System.Data.DataRowView'不包含名为'Id,StudentName'的属性. (5认同)

小智 7

您可以通过以下代码实现它

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"));
Run Code Online (Sandbox Code Playgroud)

如需更多了解请参考这里.