我有一个下拉列表,需要在代码中填充数据。使用以下代码设置DataTextField
属性:
ddlItems.DataTextField = "ItemName";
我想将两个数据属性显示为DataTextField
。我尝试使用以下代码,但它没有起作用。我在网上做了研究,但找不到如何使用两个数据属性。
ddlItems.DataTextField = "ItemName" + "ItemDescription";
我需要使用什么代码来完成这个操作?
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();
我曾以两种方式类似地完成过这个任务:一种是用C#,另一种是用SQL。
下面的Matteo Gaggiano提供了一个很好的C#方法的示例:
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
然后在C#代码中使用上面的最后四行。
最简单的方法是在 .aspx 文件中:
<asp:DropDownList ID="ddlItems" runat="server" DataSourceID="YourDataSource" DataTextField='<%# Eval("Id")+" - "+Eval("Title") %>' ..... />
希望对您有所帮助。
<%# Eval("Id")+" - "+Eval("Title") %>
吗? - Kiquenet从格式化DropDownList.TextValue的评论中,我了解到了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();
<asp:DropDownList ID="ddlSample" runat="server"></asp:DropDownList>
VB.NET
Dim Conn As SqlConnection
Dim Comm As SqlCommand
Dim Read As SqlDataReader
Conn = New SqlConnection()
Conn.ConnectionString = ConfigurationManager.ConnectionStrings("Read").ConnectionString
Comm = New SqlCommand()
Comm.CommandType = CommandType.Text
Comm.CommandText = "SELECT * FROM TABLE"
Comm.Connection = Conn
Comm.Connection.Open()
Read = Comm.ExecuteReader()
ddlSample.Items.Insert(0, New ListItem("Seleziona", ""))
While Read.Read()
ddlSample.Items.Insert(1, New ListItem(Read("ID") & " - " & Read("Desc")), ReadLivelli("ID")))
End While
Read.Close()
Comm.Connection.Close()
Comm.Dispose()
Conn.Dispose()
我以前曾经做过这个,但是使用的是 Telerik RadComboBox(它能够包含一个项模板)。模板只是一个 HTML 表格,我似乎“连接”了两个字段。我相信标准的 ASP.NET 控件没有这个功能,但是如果你找一下,你会发现有第三方控件可以实现。
当然,在业务层面处理这个连接并定义一个新类型(结构体可能是最好的选择),其中一个属性包含两个字段作为一个字符串。
我相信还有其他方法可以实现这个目标(无疑更有效率的方法),这些只是我知道的一些方法,希望对你有所帮助。
select id, ItemName + ' - ' + ItemDescription as 'yournamecolumn' from `yourtable`
ddlItems.DataTextField = "yournamecolumn";
ddlItems.DataValueField = "id";
ddlItems.DataBind();
public string FullName
{
get
{
return RollNo + Name + Parentage;
}
}
创建FullName属性后,使用datatextfeild="FullName"
objDT.Columns.Add("FullName", GetType(String), "time + ' ' + location")
objDT.AcceptChanges()
ddlPickUp.DataSource = objDT
ddlPickUp.DataTextField = "FullName"
ddlPickUp.DataValueField = "location"
ddlPickUp.DataBind()