我正在从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如果我有以下内容,网格将绑定到示例类的属性
BindingList samples = new BindingList<Sample>();这意味着我将有6种类型的样本,都定义了属性。最终的继承结构可能很复杂,所以我想知道它是否值得。欢迎任何反馈意见。
我使用的是Windows2.0,它是c#应用程序。
发布于 2009-07-23 19:28:20
如果您正在使用DataGrid,是否有可能切换到DataGridView?会更加灵活..。
我不完全确定这个问题,但是:
如果属性是固定的,但不想显示所有列
然后,只需在添加数据之前设置AutoGenerateColumns = false,然后自己添加所需的列;或者,将其保留为启用状态,并在不希望看到的列上设置.Visible = false。
如果属性在运行时是动态的
然后就变得棘手了;您进入了System.ComponentModel的更黑暗的角落;您可以通过ITypedList (允许每个列表实例定义不同的)或TypeDescriptionProvider (允许在每种类型或每一个列表实例中定义不同的定义)来实现这一点,但是其中只有TypeDescriptionProvider才能与BindingList<T>一起工作。老实说,我不认为这是您的意思;如果是的话,坚持使用DataTable就更简单了(两者都很难正确实现)。
我希望这会有所帮助;我希望它就像隐藏一些专栏一样简单!如果我没抓住重点,请告诉我。
https://stackoverflow.com/questions/1173359
复制相似问题