关于.net winform ComboBox的DataSource,DisplayMember和ValueMember属性的设置顺序的问题。

ComboBox的DataSource属性为object类型,但是需要实现IListSource接口的类型。

当把DataTable赋值给该属性后,如果此时没有指定ComboBox的DisplayMember和ValueMember属性的话,

这时获得的ComboBox的SelectValue属性将是System.Data.DataRowView的一个实例。

据此推测DataTable中实现的IListSource接口中的GetList()方法应该返回的是DataTable的

DefaultView,也就是DataView的一个实例是DataRowView的集合。而因为没有指定DisplayMember和ValueMember

属性,所以ComboBox直接把DataView中的每一个DataRowView实例填充到列表中。

这样的话就可能在ComboBox的SelectedIndexChanged事件处理中产生错误。

为了避免这个问题应该先设置DisplayMember和ValueMember属性,然后再设置DataSource属性。

避免先设置DataSource属性。

posted @ 2010-03-31 11:28  刘鸿海  阅读(5281)  评论(4编辑  收藏  举报