Связывание данных с элементом управления DataGridView, которого нет в коллекции Form.Controls? - PullRequest
1 голос
/ 01 декабря 2011

У меня есть пользовательский элемент управления, который наследует от DataGridView. Он дополняет элемент управления дополнительной функциональностью (которая экспортирует содержимое каждой ячейки) . Я хотел бы использовать эту функциональность, но не нужен пользовательский интерфейс самой сетки.

Итак, я создаю экземпляр пользовательского элемента управления, задаю для свойства DataSource экземпляр DataTable и ... нет столбцов в сетке. В моей DataTable есть столбцы (и строки) , AutoGenerateColumns имеет значение true, но столбцы в коллекции «Столбцы» таблицы отсутствуют. Тот факт, что его пользовательский элемент управления становится неактуальным на этом этапе, потому что элемент управления DataGridView делает то же самое.

Если я добавлю сетку в коллекцию «Элементы управления» формы, будет работать привязка данных, и в сетке будут мои столбцы.

Почему это?

  public Form1()
  {
     InitializeComponent();

     DataTable dataTable = new DataTable() { TableName = "Bob" };
     dataTable.Columns.Add("One",typeof(String));
     dataTable.Columns.Add("Two", typeof(String));
     dataTable.Columns.Add("Three", typeof(String));
     dataTable.Rows.Add("a", "b", "c");
     dataTable.Rows.Add("d", "e", "f");
     dataTable.Rows.Add("g", "h", "i");

     DataGridView grid = new DataGridView();

     grid.DataSource = dataTable;
     int n1 = grid.Columns.Count; // returns zero

     this.Controls.Add(grid); // why do I have to do this ?

     grid.DataSource = null;
     grid.DataSource = dataTable;
     int n2 = grid.Columns.Count; // returns three
  }

Спасибо, Росс

1 Ответ

3 голосов
/ 02 декабря 2011

Комментарий Дэвида Холла привел меня к здесь , что привело меня к изучению BindingContext сетки.Конечно, он нулевой, но, создав новый BindingContext для элемента управления grid, привязка сетки к DataTable теперь заполняет коллекцию «Columns».обязательный контекст или источник данных, похоже, не имеют значения!

...