Источник данных, содержащий нулевое значение, приводит к сбою ComboBox - PullRequest
0 голосов
/ 16 декабря 2008

Я с головой ушел в C # и .Net 2.0 с помощью Linq, и у меня возникли некоторые проблемы при отладке некоторых проблем, а именно:

У меня есть элемент управления 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 (или без параметра) работает - она ​​отображает все объекты.

Есть ли способ указать для меня нулевое значение для первого объекта, не прибегая к объектам с магическими числами (например, наличие фиктивной записи в БД только для обозначения значения N / A)? Что-то вроде обнуляемого было бы идеально, но я как бы потерялся.

Кроме того, я попытался добавить new T() вместо null в список, но это привело только к OutOfMemoryException.

Ответы [ 2 ]

1 голос
/ 17 декабря 2008

Элемент управления комбинированного окна имеет возможность добавлять элементы, связанные с данными, к жестко закодированным элементам в списке. Таким образом, вы жестко закодируете свое значение n / a, а данные связывают реальные значения.

0 голосов
/ 17 декабря 2008

Хорошо, кажется, DataSource становится недействительным, если вы попытаетесь добавить значение null. Решением было просто добавить элементы через простой цикл foreach с пустой строкой в ​​начале вместо назначения List<>.

...