Привязка к BindingList <T> - выбирает, что связать?

Я не знал...

Listen to Yourself

7
задан user7116 6 August 2009 в 18:52
поделиться

3 ответа

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;


РЕДАКТИРОВАТЬ 2
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;}
}
10
ответ дан 6 December 2019 в 23:11
поделиться

Я предполагаю, что вы имеете в виду DataGrid в WinForms, но то же самое применимо к большинству привязываемых элементов управления.

Да, вы можете это сделать. Это можно сделать в два этапа.

  • Установите элемент DataSource как экземпляр BindingList .
  • Задайте для свойства DataMember строковое имя свойства, которое вы хочу связать.
0
ответ дан 6 December 2019 в 23:11
поделиться

Я справился с этим несколькими способами, надеюсь, это будет полезно.

Первый вариант, как упомянул Джастин, - установить AutoGennerateColumns = false и сделать это вручную оттуда. Если вы привяжете его, среда выполнения создаст столбцы для всех общедоступных свойств Sample. Если вы хотите удалить их, вы можете сделать это с помощью

DataGridView.Columns["SomePropertyOfSample"].Remove();

. Это решение немного проблематично, так как вам нужно постоянно обновлять его и явно удалять элементы.

Параметр Justin Edit 2, устанавливающий для атрибута Browsable значение false на свойство интересно, я не пробовал это раньше.

Решение, которое я в конечном итоге использовал и которое, как мне кажется, работает довольно хорошо, вращается вокруг интерфейса.

У меня было два разных DataGridView, которые должны были показывать одно и то же. data, но каждый раз показывая и скрывая разные столбцы. В этом случае вы бы сделали:

1
ответ дан 6 December 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: