2008-12-16 52 views
0

我已经使用LINQ抛出自己头扎到C#和.NET 2.0,和我有调试的一些问题,也就是以下几个问题:数据源,使组合框失败

我有一个ComboBox控件(cmbObjects)我想用一组使用Linq检索的对象进行填充。我写了一个辅助方法来填充List<T>通用:

class ObjectProvider 
{ 

    public static List<T> Get<T>(bool includeNull) where T : class, new() 
    { 
     List<T> list = new List<T>(); 
     LutkeDataClassesDataContext db = ConnectionManager.GetConnection(); 
     IQueryable<T> objects = db.GetTable<T>().AsQueryable(); 

     if (includeNull) list.Add(null); 

     foreach (T o in objects) list.Add(o); 

     return list; 
    } 

    public static List<T> Get<T>() where T : class, new() 
    { 
     return Get<T>(false); 
    } 
} 

调用带有真或假的函数,当我验证了结果 - 在List确实包含正确的价值观,传递true时,它包含null作为第一个值,其次是其他对象。

当我分配DataSource至然而ComboBox,控制简单地拒绝显示任何项目,包括null值(未选择):

cmbObjects.DataSource = ObjectProvider.Get<Car>(true); 

传递false(或没有参数)不工作 - 它显示所有的对象。

有没有办法让我为第一个对象指定一个“null”值而不诉诸幻数对象(就像在DB中有一个伪造的条目来指定一个N/A值)?可以为空的东西是理想的,但我有点失落。

此外,我已经尝试将new T()而不是null添加到列表中,但只导致OutOfMemoryException

+0

此外,我试过将`List`声明为`List >`,但编译器不允许我这样做。 – 2008-12-16 09:49:16

+0

将一个Null值添加到列表中的意图是什么?这个列表的Combobox应该显示为单个项目的元素? – Gishu 2008-12-16 09:56:54

回答

0

好吧,如果您尝试添加null值,那么DataSource似乎无效。解决方案是通过简单的foreach循环添加项目,并在开始时使用空字符串,而不是分配List<>

1

组合框控件可以选择将数据绑定项追加到列表中的硬编码项目。所以你硬编码你的n/a值,并且数据绑定真实的值。