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

时间:2012-03-23 10:45:23

标签: c# asp.net

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

ddlItems.DataTextField = "ItemName";

我想将两个数据属性显示为DataTextField。我尝试使用以下代码,但它不起作用。我在网上研究过但无法找到如何使用两种数据属性。

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

我需要使用哪些代码才能执行此操作?

11 个答案:

答案 0 :(得分:21)

您可以使用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();

答案 1 :(得分:6)

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

更多答案和代码示例的类似问题: Format DropDownList.TextValue

答案 2 :(得分:4)

最简单的方法是在.aspx文件中:

<asp:DropDownList ID="ddlItems" runat="server" DataSourceID="YourDataSource" DataTextField='<%# Eval("Id")+" - "+Eval("Title") %>' ..... />
希望有用。

答案 3 :(得分:2)

I have done something similar to this in two ways: either in C# or SQL.

Matteo Gaggiano below gives a good example of the C# method:

Symbol

Or it can be done in SQL:

dataTable.Columns.Add(new DataColumn("Title", System.Type.GetType("System.String"), "ItemName + ' - ' + ItemDescription"));

ddlItems.DataSource = dataTable;
ddlItems.DataTextField = "Title";
ddlItems.DataValueField = "Id";
ddlItems.DataBind();

and then using the last four lines above in the C# code.

答案 4 :(得分:1)

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

当然可以在业务层处理这种连接,并使用包含两个字段作为一个字符串的属性来定义新类型(struct可能是最好的)。

我确信还有其他方法可以实现这一目标(毫无疑问会有更有效的方式),这些只是我所知道的一些可能有用的方法。

答案 5 :(得分:1)

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

using(StreamWriter writer = File.CreateText(saveFilePath))
{
    string sLine = "time;joint;pos_x;pos_y;poz_z";
    writer.WriteLine(sLine);
}

using(StreamWriter writer = File.AppendText(saveFilePath))
{
    string sLine = string.Format("{0:F3};{1};{2:F3};{3:F3};{4:F3}", Time.time, (int)joint, jointPos.x, jointPos.y, jointPos.z);
    writer.WriteLine(sLine);
}

答案 6 :(得分:1)

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

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

试试这个:

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";

答案 9 :(得分:0)

以下代码对我有用:

select id, ItemName + ' - ' + ItemDescription as 'yournamecolumn' from `yourtable`
ddlItems.DataTextField = "yournamecolumn";
ddlItems.DataValueField = "id";
ddlItems.DataBind();

答案 10 :(得分:0)

objDT.Columns.Add("FullName", GetType(String), "time + ' ' + location")
                        objDT.AcceptChanges()
                        ddlPickUp.DataSource = objDT
                        ddlPickUp.DataTextField = "FullName"
                        ddlPickUp.DataValueField = "location"
                        ddlPickUp.DataBind()