Почему я должен добавить DataGridView в форму, чтобы получить данные? - PullRequest
0 голосов
/ 24 ноября 2011

Мне пришлось скопировать сетку данных в другую, чтобы перебрать ее в потоке фонового работника, создав экспорт Excel.

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

Итак, я создал новый DataGridView (программно) и поместил копию исходного DataTable в свойство DataSource нового DataGridView.Однако я выяснил, что если я не добавлю представление данных в свойство Controls (list) какой-либо формы, RowCount все равно будет равно 0 ...

Может кто-нибудь объяснить это?

Примечание. Копия DataTable - это просто новая DataTable с копией () столбцов.

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

Это довольно просто.Когда вы только что создали свой DataGridView (или любой другой элемент управления WinForms или Wpf), он создается только в .Net.Например, для него не создано системное окно.И пока элемент управления находится в этом состоянии, он не применяет никаких привязок в целях оптимизации (почему визуальный контроль должен делать что-либо, пока он невидим? :)).Когда вы добавляете свой элемент управления в форму visible , элементу управления будет создано системное окно (т. Е. Его свойство Handle будет инициализировано), и он начнет работать как положено.Если вы хотите, чтобы какой-либо визуальный элемент управления работал так, как задумано, но не показывает его на самом деле, вам просто нужно прочитать его свойство Handle.Это заставит контроль создать системное окно и полностью инициализировать.Также для WPF это немного сложнее, потому что вы можете получить дескриптор только для оконного элемента управления, и чтобы получить его, вы должны использовать следующий код:

public IntPtr GetWpfWindowHandle(Window w)
{
   var interopHelper = new WindowInteropHelper(w);
   return interopHelper.Handle;
}
0 голосов
/ 02 декабря 2011

См. этот вопрос для ответа. В этом случае простое чтение дескриптора не сработало - мне нужно было назначить BindingContext для сетки.

...