在c#中动态添加字段到集合?

时间:2009-12-15 17:34:59

标签: c# asp.net string data-binding

我有一些基本的下拉列表数据绑定代码。我需要在运行时修改数据源并插入一个新字段。

  ddlPrimaryCarrier.DataSource = FinancialInstitutions;
            ddlPrimaryCarrier.DataValueField = "EntityCode";
            ddlPrimaryCarrier.DataTextField = "EntityNameDesc";
            ddlPrimaryCarrier.DataBind();

我实际上想要在集合中添加一个字段,该字段是描述和代码的格式化字符串。像...

var newField = string.Format("({0}) - {1}", "EntityCode", "EntityNameDesc");

然后

ddlPrimaryCarrier.DataTextField = "newField";

这样做的正确方法是什么?我可以遍历现有的集合并使用我需要的字段创建一个新的匿名类型列表吗?任何人都有如何做到这一点的例子?

谢谢, 〜在圣地亚哥

2 个答案:

答案 0 :(得分:1)

这里最简单的方法是向类型添加属性。如果生成了这个(可能是EF等),那么使用partial class

namespace Whatever {
    partial class FinancialInstitution {
        public string EntityCaption {
            get {return "(" + EntityCode + ") - " + EntityNameDesc;
        }
    }
}

如果这是DataTable,您可以添加计算列。如果这是你控件之外的类型,那么可能使用自定义类型描述符(通过TypeDescriptionProvider)直接执行此操作(但直接使用类型),但这非常困难。我宁愿封装实例,添加模仿封装类的pass-thru属性,并添加新的:

class MyShim {
    private readonly FinancialInstitution inner;
    public MyShim(FinancialInstitution inner) {this.inner = inner;}
    public string EntityCode { get {return inner.EntityCode;}}
    public string EntityNameDesc { get {return inner.EntityNameDesc;}}
    public string EntityCaption {
        get {return "(" + EntityCode + ") - " + EntityNameDesc;
    }
}

然后绑定到垫片。

答案 1 :(得分:0)

假设FinancialInstitutionsFinancialInstitution个对象的集合,请向FinancialInstitution类添加新属性:

public string DisplayName
{
    get { return string.Format("({0}) - {1}", EntityCode, EntityNameDesc);
}

如果是DataTable,您可以添加计算列:

FinancialInstitutions.Columns.Add("DisplayName", typeof(string), "'(' + EntityCode + ') - ' + EntityNameDesc");

在这两种情况下,请将ComboBox的{​​{1}}设置为“DisplayName”