我正在从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应用程序。
答案 0 :(得分:1)
如果您使用DataGrid
,是否有可能切换到DataGridView
?它将更加灵活......
我不完全确定这个问题,但是:
然后在添加数据之前简单地设置AutoGenerateColumns = false
,并自己添加所需的列;或者,保持启用状态,只需在您不想看到的列上设置.Visible = false
。
然后它变得棘手;你进入了System.ComponentModel
的黑暗角落;您可以使用DataGridView
通过ITypedList
(允许每个列表实例使用不同的定义)或TypeDescriptionProvider
(允许每种类型或每个列表实例使用不同的定义)来执行此操作 - 但仅限TypeDescriptionProvider
{1}}将与BindingList<T>
一起使用。说实话,我不认为这就是你的意思;如果是的话,坚持使用DataTable
会更简单(两者都很难正确实现)。
我希望有所帮助;我希望它像隐藏一些列一样简单!如果我错过了这一点,请告诉我。