如何设置下拉列表DataTextField以显示两个数据属性字段

本文关键字:数据属性 字段 显示 两个 DataTextField 何设置 设置 下拉列表 | 更新日期: 2023-09-27 18:28:51

我有一个下拉列表,其中填充了代码后面的数据。DataTextField属性由以下代码设置:

ddlItems.DataTextField = "ItemName";

我想将两个数据属性显示为DataTextField。我尝试使用以下代码,但没有成功。我在网上研究过,但找不到如何使用两个数据属性。

ddlItems.DataTextField = "ItemName" + "ItemDescription";

我需要使用什么代码来执行此操作?

如何设置下拉列表DataTextField以显示两个数据属性字段

您可以使用LinqToSql创建一个新的数据源,其中包含一个按您希望的方式格式化的显示字段,例如:

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

您可以使用ddlItems的Formatting事件,该事件将允许您设置如何将某个项转换为字符串的逻辑,或者如果在程序中使用它有任何意义,则可以使用一个返回Name+Desc的属性,如RepresentingString,并绑定到该属性。

类似问题,包含更多答案和代码示例:格式化DropDownList.TextValue

我用两种方式做了类似的事情:用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") %>' ..... />

希望有用。

我以前已经实现了这一点,但我使用telerik radcombobox(能够包含项目模板)做到了。模板只是一个html表,我似乎将这两个字段"连接"在一起。我很确定标准的asp.net控件没有这个功能,但如果你环顾四周,你会发现第三方控件会。

当然,可以在业务层处理这种串联,并定义一个新的类型(结构可能是最好的),该类型具有将两个字段作为一个字符串包含的属性。

我相信还有其他方法可以实现这一点(毫无疑问是更有效的方法),据我所知,这些方法可能会有所帮助。

从对Format DropDownList.TextValue的评论开始,我了解了DataColumn.Expression(DataColumn.Expression属性,因此这可能是一个有效的解决方案(在我的情况下,它是完美的):

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

只需从后面的代码中填写下拉列表

HTML

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

如果您首先使用实体框架代码进行编码,则可以创建一个名为NameAndDescription的新字段并设置您的ddlItems.DataTextField = "NameAndDescription"。该字段可以按如下方式创建:

    public String NameAndDescription
    {
        get { return this.ItemName + this.ItemDescription; }
    }

试试这个:

select std.Student_ID,std.Student_Name+' - '+ std.Admission_ID Student_Name 
from Student_tbl std , School_tbl sch 
where sch.School_ID = '" + School_ID + "' and std.Current_Class = '" + Class_ID + "' 
      and std.Section_ID = '" + Section_ID + "'
DL_Student.DataTextField = "Student_Name";
DL_Student.DataValueField = "Student_ID";

以下代码对我有效:

select id, ItemName + ' - ' + ItemDescription as 'yournamecolumn' from `yourtable`
ddlItems.DataTextField = "yournamecolumn";
ddlItems.DataValueField = "id";
ddlItems.DataBind();
objDT.Columns.Add("FullName", GetType(String), "time + ' ' + location")
                        objDT.AcceptChanges()
                        ddlPickUp.DataSource = objDT
                        ddlPickUp.DataTextField = "FullName"
                        ddlPickUp.DataValueField = "location"
                        ddlPickUp.DataBind()

在C#中,我们可以通过创建一个属性将多个列绑定到一个datatext字段,该属性是所有必需列的串联,就像在全名的情况下一样

public string FullName
{
            get
            {
                return  RollNo + Name +  Parentage;
            }
}

创建FullName属性后使用datatextfeild=";全名";