У меня есть пользовательский элемент управления, который наследует от 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
}
Спасибо,
Росс