我想绑定ComboBox
到DataTable
(我不能改变其原来的架构)
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那样高效,但除非表有数千行,否则我不担心.
计算的列解决方案可能是最好的.但是,如果您无法更改数据表的架构以添加该架构,则可以遍历该表并填充将用作数据源的新集合.
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那样高效,但除非表有数千行,否则我不担心.
最简单的方法是使用Expression属性在DataTable中创建一个新的计算列:
tbldata.Columns.Add("FullName", typeof(string), "Name + ' ' + Surname"); ... cbo.DataTextField = "FullName";
我会在您的数据对象上创建一个属性,然后将其映射到DataTextField
数据对象
public string FullName { get { return Name + " " + Surname; } }
代码隐藏
cbo.DataSource = tbldata; cbo.DataTextField = "FullName"; cbo.DataValueField = "GUID"; cbo.DataBind();