BindingList<Sample> samples = new BindingList<Sample>();
DataGridView dgv = new DataGridView();
dgv.DataSource = samples;
Это должно отображать каждое общедоступное свойство в виде столбца в DataGridView. Если вы хотите изменить отображаемые свойства, вам также необходимо сделать следующее:
dgv.AutoGenerateColumns = false;
и войти в свойства datagridview, добавить столбцы вручную и установить DataPropertyName равным имени свойства.
Если вы создали datagridview в коде, следующее создаст и добавит столбец в dgv.
DataGridViewColumn dgvc = new DataGridViewColumn();
dgvc.Name = "PropertyA";
dgvc.HeaderText = "Property A";
dgvc.DataPropertyName = "PropertyA";
dgv.Columns.Add(dgvc);
Это ДОЛЖНО дать вам что-то более близкое к тому, что вы хотели. Однако, поскольку он использует анонимный класс, вы не можете использовать BindingList (о котором я знаю). В качестве альтернативы вы можете создать класс SampleBinding, который имеет только те свойства, которые вы хотите отобразить, и сгенерировать их из списка обычных образцов.
public class Sample
{
public int PropertyA {get;set;}
public bool PropertyB {get;set;}
public string PropertyC {get;set;}
public double PropertyD {get;set;}
}
List<Sample> samples = new List<Samples>(GetSamples());
var sampleBinding = from sample in samples
select new
{
PropertyA = sample.PropertyA,
PropertyC = sample.PropertyC
};
BindingList bl = new BindingList();
bl.DataSource = sampleBinding;
dgv.DataSource = bl;
public class Sample
{
[Browsable(false)]
public int PropertyA {get;set;}
public bool PropertyB {get;set;}
public string PropertyC {get;set;}
[Browsable(false)]
public double PropertyD {get;set;}
}
Я предполагаю, что вы имеете в виду DataGrid в WinForms, но то же самое применимо к большинству привязываемых элементов управления.
Да, вы можете это сделать. Это можно сделать в два этапа.
BindingList
. Я справился с этим несколькими способами, надеюсь, это будет полезно.
Первый вариант, как упомянул Джастин, - установить AutoGennerateColumns = false и сделать это вручную оттуда. Если вы привяжете его, среда выполнения создаст столбцы для всех общедоступных свойств Sample. Если вы хотите удалить их, вы можете сделать это с помощью
DataGridView.Columns["SomePropertyOfSample"].Remove();
. Это решение немного проблематично, так как вам нужно постоянно обновлять его и явно удалять элементы.
Параметр Justin Edit 2, устанавливающий для атрибута Browsable значение false на свойство интересно, я не пробовал это раньше.
Решение, которое я в конечном итоге использовал и которое, как мне кажется, работает довольно хорошо, вращается вокруг интерфейса.
У меня было два разных DataGridView, которые должны были показывать одно и то же. data, но каждый раз показывая и скрывая разные столбцы. В этом случае вы бы сделали: