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);
    }
}

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

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

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

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

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

另外,我尝试添加new T()而不是添加null到列表中,但这只会导致OutOfMemoryException.

4

2 回答 2

1

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

于 2008-12-17T10:07:19.930 回答
0

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

于 2008-12-17T10:04:05.880 回答