包含空值的DataSource使ComboBox失败

时间:2008-12-16 09:44:22

标签: linq data-binding combobox c#-2.0 datasource

我使用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);
    }
}

我在使用true或false调用函数时验证了结果 - List确实包含正确的值,在传递true时,它包含null作为第一个值,后跟其他对象。

但是,当我将DataSource分配给ComboBox时,控件只是拒绝显示任何项目,包括null值(不可选):

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

传入false(或没有参数)确实有效 - 它会显示所有对象。

有没有办法让我为第一个对象指定一个“null”值,而不需要使用幻数对象(比如在数据库中有一个虚假的条目来指定一个N / A值)?可空的东西是理想的,但我有点迷失。

此外,我已尝试在列表中添加new T()而不是null,但这只会产生OutOfMemoryException

2 个答案:

答案 0 :(得分:1)

组合框控件具有将数据绑定项附加到列表中的硬编码项的选项。所以你硬编码你的n / a值,数据绑定真实值。

答案 1 :(得分:0)

好的,如果您尝试添加DataSource值,null似乎无效。解决方案是在开始时通过一个简单的foreach循环添加项目,而不是分配List<>

相关问题