使用动态属性实现可绑定对象

时间:2011-03-17 19:37:26

标签: c# dynamic properties bindable

我正在尝试在C#中创建一个可以绑定到gridview的对象。我有三个对象来实现这一目标。 EntryTable,EntryRow和EntryValue。 EntryTable包含EntryRows列表,EntryRow包含EntryValues列表。 Entry值对象由属性名称和值组成。

数据结构如下:

public class EntryTable 
{
    private List<EntryRow> _lERTable = null;
    ...

public class EntryRow
{
    private List<EntryValue> _lEVRow = null;
    ...

public class EntryValue
{
    private string _sFieldName;
    private string _sValue;
    ...

我知道默认情况下可绑定对象只会绑定到顶级可见属性。因此,我只看到一个EntryRow对象名列表,如下所示:

-------------------------------------------
Norseman.CommandN.Data.CNStore.EntryRow    |
-------------------------------------------
Norseman.CommandN.Data.CNStore.EntryRow    |
------------------------------------------

我的最终目标是能够将填充的EntryTable绑定到网格,并让EntryTable对象识别所有EntryRows中的所有属性名称,并将数据显示为网格。 问题在于并非每个EntryRow都具有相同数量的EntryValues。例如,如果我存储员工,则某些员工可能没有manager属性。

我希望像这样处理数据:

First Name |    Last Name  |     Position             |     Manager
-----------------------------------------------------------------
Andrew     |    Milton     |    Software Developer    |     null
-----------------------------------------------------------------
Barry      |   Singleton   |    Web Developer         |     Marcus Manicotti

我考虑过将我的数据输入传统的System.Data.DataTable模型,但我更愿意实现自己的对象以避免开销。

非常感谢任何有关此事的帮助。

1 个答案:

答案 0 :(得分:1)

如果您使用的是WinForms,则可以在集合上实现ITypedList。如果您使用的是WPF,则可以在每个项目上使用ICustomTypeDescriptor