динамически создаваемые столбцы таблицы данных недоступны, если не добавлены в форму ... почему? - PullRequest
2 голосов
/ 17 июня 2010

Мы просто динамически создали элемент управления DataGridView и связали его с таблицей данных. Мы связывали стиль определенных столбцов. Но когда мы попытались получить доступ к столбцам, мы получили нулевую ссылку. При дальнейшем исследовании мы обнаружили, что если мы добавим элемент управления DataGridView в основную форму, а затем попытаемся получить доступ к его столбцам, он будет работать нормально !!!

Код, который выдает ошибку:

DataGridView gv = new DataGridView();
gv.DataSource = GetDataTable(); //binding it to datatable
Debug.Assert(gv.Columns == null);

Код, который отлично работает:

DataGridView gv = new DataGridView();
gv.DataSource = GetDataTable(); //binding it to datatable
this.Controls.Add(gv); //adding to form
Debug.Assert(gv.Columns == null); //the assertion fails!

Почему это поведение так? Есть ли обходной путь для этого?

Ответы [ 2 ]

1 голос
/ 17 июня 2010

У меня была похожая проблема, но я не уверен, что она может вам помочь.

Вы можете прикрепить обработчик к событию DataGridView.DataBindingComplete.

Когда DataGridView отображается в главном потоке, если произойдет это событие, и у вас будут созданы и доступны все столбцы

0 голосов
/ 17 июня 2010

Э-э, крошечный удар в темноте; но вполне вероятно, что для столбцов, созданных с использованием свойства AutoGenerateColumns, требуется BindingContext для правильного создания и управления привязками для значений ячеек. Как правило, этот BindingContext не может быть определен до тех пор, пока не будет установлен родительский элемент управления.

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