Сделайте эту строку кода под запросом:
dataGridViewX.DataSource = new BindingSource(SQLquery.ToList(), null);
BindingSource может работать с List<anonymoustype>
, запрос создаст
В качестве альтернативы, потому что вы ' Если вы работаете с анонимными типами, вы также можете создать метод расширения, который сгенерирует вам BindingList:
static class ListExtensions
{
public static BindingList<T> ToBindingList<T>(this IList<T> source)
{
return new BindingList<T>(source);
}
}
Вы можете привязать сетку данных к bindingList:
dataGridViewX.DataSource = SQLquery.ToList().ToBindingList();
Binding через BindingSource дает некоторые преимущества для фильтрации, сортировки, доступа к текущему элементу и т. д. c. Это также позволяет вам организовать иерархические структуры данных. Если вы собираетесь использовать BindingSource, возможно, вам следует НЕ использовать анонимные типы, поскольку они генерируют классы POCO, сгенерированные компилятором, к которым у вас нет надежного доступа к , если вы хотите копать объект .Current
bindingSource. и приведите его к тому, с чем вы работаете .
Если вместо этого вы сделали свой класс полностью определенным в своем собственном коде, то у вас есть:
collection.Select(c => new Whatever(){ Id = c.Id, Name = c.Name });
Но вы можете лучше работайте с ним:
var x = myBindingSource.Current as Whatever;
Если вы используете анонимные типы, вы просто не сможете выполнить приведение as Whatever
, и вы в конечном итоге застрянете с myBindingsource.Current
как объектом, который требует либо какой-то dynamic
обходной путь (который не является оптимальным, когда на самом деле это тип класса, известный во время разработки) или что-то вроде хака, когда вы объявляете другой анонимный тип с таким же порядком и типом параметров и полагаетесь на то, что компилятор делает их одинаковыми вещь, когда он создает анонимные типы