Я с головой окунулся в 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);
}
}
Я проверил результаты при вызове функции с истиной или ложью - List действительно содержит правильные значения, при передаче true он содержит null в качестве первого значения, за которым следуют другие объекты.
Однако, когда я назначаю DataSourceComboBox, элемент управления просто отказывается отображать какие-либо элементы, включая значение null (не выбирается):
cmbObjects.DataSource = ObjectProvider.Get<Car>(true);
Передача false (или отсутствие параметра) действительно работает - отображаются все объекты.
Есть ли способ указать "нулевое" значение для первого объекта, не прибегая к объектам с магическим числом (например, наличие фиктивной записи в базе данных только для обозначения значения N / A)? Что-то вроде обнуляемого было бы идеально, но я заблудился.
Кроме того, я попытался добавить в список new T() вместо null, но это привело только к OutOfMemoryException.
какова цель добавления нулевого значения в список, элементы которого Combobox должны отображаться как отдельные элементы?
Я имел в виду использовать этот элемент управления для отображения слабой связи. В базе данных отношение определяется как int, допускающий значение NULL, который я хотел бы представить как выбор, который пользователь может сделать, выбрав пустое значение в ComboBox.
Хотел бы увидеть лучший ответ на этот вопрос. у меня та же проблема





Хорошо, похоже, что DataSource становится недействительным, если вы пытаетесь добавить значение null. Решением было просто добавить элементы через простой цикл foreach с пустой строкой в начале вместо назначения List<>.
В поле со списком есть возможность добавлять элементы с привязкой к данным к жестко запрограммированным элементам в списке. Таким образом, вы жестко запрограммируете свое непринятое значение, а данные связывают реальные значения.
Совершенно уверен, что если вы добавите DataBind в коллекцию, вы также не сможете вручную добавлять элементы - это операция либо или ...
Не правда. В файле aspx вы можете указать элементы списка с жестким кодом и установить для атрибута AppendDataBoundItems значение true. Затем, когда вы выполняете DataBind (), он добавляет строки данных к жестко запрограммированным элементам.
Кроме того, я пытался объявить
ListкакList<Nullable<T>>, но компилятор не позволяет мне этого сделать.