Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 格式化DropDownList.TextValue_C#_.net_Asp.net_Drop Down Menu - Fatal编程技术网

C# 格式化DropDownList.TextValue

C# 格式化DropDownList.TextValue,c#,.net,asp.net,drop-down-menu,C#,.net,Asp.net,Drop Down Menu,我的存储过程是这样的 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"

我的存储过程是这样的

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:数据绑定:“System.Data.DataRowView”不包含名为“Id StudentName”的属性

在下拉列表的文本部分,我想显示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")); 
这似乎不是自动实现的,例如,请参见

因此,以编程方式执行此操作:

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

如果数据源是DataTable,则可以向表中添加表达式计算列。新列的表达式如下所示:

newcolumn.Expression = "Id + ' - ' + StudentName";

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

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

有关更多了解,请参阅。

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

这很简单,只是查询中有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"));

若你们有一个类列表来填充下拉列表,这可能是最好的选择

List<FOO> foo = new List<FOO>();

ddlFoo.DataSource = foo.Select(x => 
    new ListItem { Text = x.Text1 + " - " + x.Text2, Value = x.Id.ToString() });
ddlFoo.DataBind(); 

谢谢,但我无法更改存储过程。它已经存在于用户的多个位置。如果是这种情况,您需要循环使用数据集,创建一个新的数据集,创建一个名为text的新列,并指定Id+-+text作为其值,并将该新数据集绑定到您的组合框。不要在数据层上转换,在演示级别执行此操作我在数据绑定数据绑定时遇到此错误:“System.Data.DataRowView”不包含名为“Id,StudentName”的属性。但它仍然不起作用,格式字符串将“,”视为1000个分隔符,而不是属性名分隔符。链接不起作用,我现在通过选择一个新的annonymous对象解决了这个问题,该对象具有显示组合文本的Name属性。第一个解决方案不起作用,请使用第三个解决方案。@MrFox new annonymous object?仍然需要设置DropDownList的DataTextField和DataValueField。我没有列出DataTable或DataSet。
ddlA.DataSource = // Some source
ddlA.DataTextField = "TEXT";
ddlA.DataValueField = "Id";
ddlA.DataBind();
ddlA.Items.Insert(0, new ListItem(" Select one", "0"));
List<FOO> foo = new List<FOO>();

ddlFoo.DataSource = foo.Select(x => 
    new ListItem { Text = x.Text1 + " - " + x.Text2, Value = x.Id.ToString() });
ddlFoo.DataBind();