После установки DataSource для DataGridView столбцы и строки по-прежнему пусты - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть DataTable и DataGridView.

Я прочитал этот ответ , но у меня нет DataAdapter, поэтому я не могу вызвать dataAdapter.Update(dataTable);.Я также читаю некоторые страницы официальной документации (например, this ), но не понимаю.

Упрощенный код:

var dt = new DataTable();

var c1 = new DataColumn("ColumnA", typeof(int))
{
    Caption = "ColumnA"
};

var c2 = new DataColumn("ColumnB", typeof(int))
{
    Caption = "ColumnB"
};

dt.Columns.Add(c1);
dt.Columns.Add(c2);

var dgv = new DataGridView();

var c11 = new DataGridViewTextBoxColumn()
{
    Name = "ColumnA",
    DataPropertyName = "ColumnA"
};

var c21 = new DataGridViewTextBoxColumn()
{
    Name = "ColumnB",
    DataPropertyName = "ColumnB"
};

dgv.Columns.Add(c11);
dgv.Columns.Add(c21);

var bs = new BindingSource();

// I also tried inverting these two lines:
bs.DataSource = dt;
dgv.DataSource = bs;

dt.Rows.Add(100, 100);
dt.Rows.Add(200, 200);

// I also tried putting this line here:
//bs.EndEdit();

// here bs.Count == 2, but dgv.RowCount == 0

1 Ответ

0 голосов
/ 17 февраля 2019

Значение BindingContext DataGridView перед добавлением в контейнерный элемент управления равно нулю, а при настройке DataSource для элемента управления проверяется, является ли значение BindingContext пустым, столбцы и строки не добавляются, покапосле того, как BindingContext изменится на ненулевое значение.

Если это элемент управления, который вы собираетесь добавить к родительскому элементу, то, добавив его в родительский, вы получите столбцы и строки:

this.Controls.Add(dgv);

Если он не будет добавлен в контейнер и, например, предназначен только для печати, вы можете установить BindingContext для элемента управления:

dgv.BindingContext = new BindingContext();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...