【问题标题】:From DataTable to BindingList从 DataTable 到 BindingList
【发布时间】:2009-07-23 17:43:16
【问题描述】:

我正在从 DataTable 切换到 BindingList。我将 DataTable 绑定到 DataGrid 对象。

这是我的困境:虽然我确实看到了转换的好处,但我的情况会使其有点复杂,我想知道转换是否值得。

我的场景: 我有一个显示化学样品的 DataGrid。有 5 种样本类型,每种类型的网格中的列会有所不同(有时根据其他参数在同一类型内)。有些列保持不变,有些存在 3 种类型,有些存在 4 种等等。不完全是简单继承的情况。目前,我有一个 DataTable,这很容易,因为我可以加载我想要的任何列,而不必为每个样本类型设置属性,如果我使用 BindingList,我将不得不这样做。但是,BindingList 将使以后引用示例属性变得更加容易。

这是我对这个对象 (BindingList) 的第一次体验,欢迎提出任何建议。据我所知 BindingList 绑定到属性。所以如果我有:

public class Sample
{
    protected string m_seq;
    protected string m_id;
    protected string m_weight;
    protected string m_units;

    public Sample()
    {
    }

    public string Seq
    {
        get { return m_seq; }
        set { m_seq = value; }
    }

    public string Id
    {
        get { return m_id; }
        set { m_id = value; }
    }

    public string Weight
    {
        get { return m_weight; }
        set { m_weight = value; }
    }

    public string Units
    {
        get { return m_units; }
        set { m_units = value; }
    }

} //end of class

如果我有类似的东西,网格将绑定到 Sample 类的属性

BindingList samples = new BindingList<Sample>();

这意味着我将拥有 6 种类型的样本,所有样本都已定义属性。最终的继承结构可能很复杂,所以我想知道它是否值得。欢迎任何反馈。

我使用的是 c# 2.0;它是一个 Windows 应用程序。

【问题讨论】:

    标签: c# inheritance datagrid bindinglist


    【解决方案1】:

    如果您使用DataGrid,您是否有机会切换到DataGridView?它会更加灵活...

    我不能完全确定这个问题,但是:

    如果属性是固定的,但不想显示所有列

    然后在添加数据前简单设置AutoGenerateColumns = false,自己添加需要的列;或者,将其保持启用状态,只需在您不想看到的列上设置 .Visible = false

    如果属性在运行时是动态的

    然后就变得棘手了;你正在进入System.ComponentModel 的黑暗角落;你可以通过ITypedList(允许每个列表实例有不同的定义)或TypeDescriptionProvider(允许每个类型或每个列表实例有不同的定义)使用DataGridView 执行此操作 - 但其中只有TypeDescriptionProvider 可以与@ 一起使用987654330@。老实说,我不认为这就是你的意思;如果是的话,坚持使用DataTable 会更简单(两者都很难正确实现)。


    希望对您有所帮助;我希望它就像隐藏一些列一样简单!如果我错过了重点,请告诉我。

    【讨论】:

    • 我正在使用 Compact Framework(我应该提到这一点,但不想分散注意力)。我的问题与设计有关,而不是与使用哪个特定控件有关。我仅限于 DataGrid。
    猜你喜欢
    • 2021-09-15
    • 2011-08-10
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2021-11-14
    相关资源
    最近更新 更多