当前位置:  开发笔记 > 编程语言 > 正文

如何绑定ComboBox,以便displaymember是源数据表的2个字段的concat?

如何解决《如何绑定ComboBox,以便displaymember是源数据表的2个字段的concat?》经验,为你挑选了3个好方法。

我想绑定ComboBoxDataTable(我不能改变其原来的架构)

cbo.DataSource = tbldata;
cbo.DataTextField = "Name";
cbo.DataValueField = "GUID";
cbo.DataBind();

我想要这个ComboBox节目tbldata.Name + tbldata.Surname.

当然tbldata可以在绑定之前将新名称+姓氏添加为字段,但我希望有更优雅的解决方案(伪代码)

cbo.DataTextField = "Name";
cbo.DataTextField += "Surname";

Jamie Ide.. 26

计算的列解决方案可能是最好的.但是,如果您无法更改数据表的架构以添加该架构,则可以遍历该表并填充将用作数据源的新集合.

var dict = new Dictionary();
foreach (DataRow row in dt.Rows)
{
    dict.Add(row["GUID"], row["Name"] + " " + row["Surname"]);
}
cbo.DataSource = dict;
cbo.DataTextField = "Value";
cbo.DataValueField = "Key";
cbo.DataBind();

显然,这不像直接绑定到DataTable那样高效,但除非表有数千行,否则我不担心.



1> Jamie Ide..:

计算的列解决方案可能是最好的.但是,如果您无法更改数据表的架构以添加该架构,则可以遍历该表并填充将用作数据源的新集合.

var dict = new Dictionary();
foreach (DataRow row in dt.Rows)
{
    dict.Add(row["GUID"], row["Name"] + " " + row["Surname"]);
}
cbo.DataSource = dict;
cbo.DataTextField = "Value";
cbo.DataValueField = "Key";
cbo.DataBind();

显然,这不像直接绑定到DataTable那样高效,但除非表有数千行,否则我不担心.



2> Thomas Leves..:

最简单的方法是使用Expression属性在DataTable中创建一个新的计算列:

tbldata.Columns.Add("FullName", typeof(string), "Name + ' ' + Surname");
...
cbo.DataTextField = "FullName";



3> bendewey..:

我会在您的数据对象上创建一个属性,然后将其映射到DataTextField

数据对象

public string FullName
{
  get { return Name + " " + Surname; }
}

代码隐藏

cbo.DataSource = tbldata;
cbo.DataTextField = "FullName";
cbo.DataValueField = "GUID";
cbo.DataBind();

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有