DataGridViewComboBoxColumn

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

DataGridViewComboBoxColumn

Сообщение Чудик » 17.09.2006 (Вс) 10:51

Суть следующая:
Использую в DataGirdView ячейки типа DataGridViewComboBowColumn. Когда форма является самостоятельной - все хорошо. Стоит сделать ее дочерней - работа с ячейками данного типа новозможна - заполнение combobox данными не происходит.
Взгляните на пример во вложении - попробуйте:
- запуск формы Selling (startup form=Selling)
- запуск родительской формы MDIparent1 (startup form=MDIparent1)

Я на этом споткнулся уже давно и не могу никак подняться. Буду благодарен за Ваши идеи!
Вложения
Test.rar
(59.08 Кб) Скачиваний: 88
Век живи - век учись!
www.detal-plast.narod.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.09.2006 (Пн) 15:24

Все это конечно интересно, но заполнение комбобоксов не производится в обоих вариантах запуска программы.
Весь мир матрица, а мы в нем потоки байтов!

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 18.09.2006 (Пн) 18:49

А вот неправда!
Для примера я заполнял толко один ComboBox

Код: Выделить всё
        CType(Me.DataGridView1(1, 1), System.Windows.Forms.DataGridViewComboBoxCell).Items.Add("111")
        CType(Me.DataGridView1(1, 1), System.Windows.Forms.DataGridViewComboBoxCell).Items.Add("222")

А чтоб мне поверили - во вложении два файла, где видно ситуацию при форме Selling как самостоятельной формы и в качестве дочерней!
Вложения
corel1.jpg
corel1.jpg (19.53 Кб) Просмотров: 1885
corel2.jpg
corel2.jpg (19.06 Кб) Просмотров: 1882
Век живи - век учись!
www.detal-plast.narod.ru

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 20.09.2006 (Ср) 11:42

Опять все воды набрали!
Век живи - век учись!
www.detal-plast.narod.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 20.09.2006 (Ср) 12:13

а ты перекинь код из Selling_Load в Selling_Activated или Selling_Shown :wink:
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

temur
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.02.2005 (Чт) 21:17
Откуда: Georgia

Сообщение temur » 20.09.2006 (Ср) 12:49

Если у всех ComboBox должны быть одинаковые значения тогда напиши так

Код: Выделить всё
        Me.DataGridView1.DataSource = objDataTable.Tables(0)
        i = objDataTable.Tables(0).Rows.Count
        Dim Col As New DataGridViewComboBoxColumn
        Col.Items.Add("111")
        Col.Items.Add("222")
        Me.DataGridView1.Columns.Add(Col)


или

Код: Выделить всё
  Me.DataGridView1.DataSource = objDataTable.Tables(0)
        i = objDataTable.Tables(0).Rows.Count
        Me.DataGridView1.Columns.Add(New DataGridViewComboBoxColumn)
        CType(Me.DataGridView1.Columns(1), System.Windows.Forms.DataGridViewComboBoxColumn).Items.Add("111")
        CType(Me.DataGridView1.Columns(1), System.Windows.Forms.DataGridViewComboBoxColumn).Items.Add("222")


А так как ты делаешь добавляется только в одину ячейку, но ячейка в которую ты добавляешь имеет тип String и Индекс Колумна 1 ,а твой комбоБокс имеет индекс Колумна 0 (Сам не пойму почему) в итоге невозможно выполнить конвертацию CType(Me.DataGridView1.(1,1), System.Windows.Forms.DataGridViewComboBoxCell).

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 20.09.2006 (Ср) 17:53

Nord777, все правильно, но причина? - неужеди при _Load данные не успевают загружаться в ComboBox?

temur, я не понял, с чего ты взял, что новый добавленный столбец имеет индекс 0? Элементарное
Код: Выделить всё
        MsgBox(Me.DataGridView1(0, 1).Value & " - " & Me.DataGridView1(1, 1).Value)

показывает, что все как надо .....
Век живи - век учись!
www.detal-plast.narod.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 21.09.2006 (Чт) 0:58

если перенести эти строки:
Код: Выделить всё
CType(Me.DataGridView1(1, 1), System.Windows.Forms.DataGridViewComboBoxCell).Items.Add("111")
CType(Me.DataGridView1(1, 1), System.Windows.Forms.DataGridViewComboBoxCell).Items.Add("222")

из Form_Load в Form_Activated... То получишь следующую картинку:
Unable to cast object of type 'System.Windows.Forms.DataGridViewTextBoxCell' to type 'System.Windows.Forms.DataGridViewComboBoxCell'.
По какой то причине из Form_load это исключение не викидывается.

замени
Код: Выделить всё
Me.DataGridView1.Columns.Add(New DataGridViewComboBoxColumn)
CType(Me.DataGridView1(1, 1), System.Windows.Forms.DataGridViewComboBoxCell).Items.Add("111")
CType(Me.DataGridView1(1, 1), System.Windows.Forms.DataGridViewComboBoxCell).Items.Add("222")

на
Код: Выделить всё
Dim DGVCBC As New DataGridViewComboBoxColumn
DataGridView1.Columns.Add(DGVCBC)
DGVCBC.Items.Add("111")
DGVCBC.Items.Add("222")

и все заработает.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

temur
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.02.2005 (Чт) 21:17
Откуда: Georgia

Сообщение temur » 21.09.2006 (Чт) 10:52

Если это не так тогда обьясни что это значит
Unable to cast object of type 'System.Windows.Forms.DataGridViewTextBoxCell' to type 'System.Windows.Forms.DataGridViewComboBoxCell'.

Ведь эта ошибка не выскакивает если обращатся к колумну по имени
Код: Выделить всё
Dim DGVCBC As New DataGridViewComboBoxColumn
DGVCBC.Name = "Column1"
DataGridView1.Columns.Add(DGVCBC)
CType(Me.DataGridView1.Columns("Column1"), System.Windows.Forms.DataGridViewComboBoxColumn).Items.Add("111")
        CType(Me.DataGridView1.Columns("Column1"), System.Windows.Forms.DataGridViewComboBoxColumn).Items.Add("222")

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 21.09.2006 (Чт) 19:02

to temur
В своем предыдущем посте я допустил ошибку - сказалось вечернее время :)
Ему надо было получить доступ к определенной ячейке а не к колонке.

Скорее всего весь этот геморой из-за внутренней реализации компонента (не знаю баг это или нет). Видимо компоненту надо получить доступ к UI-потоку, а сделать это невозможно т.к Selling_Load возникает во время обработки MDIParent1_Load.

поэтому наверное только так
а ты перекинь код из Selling_Load в Selling_Activated или Selling_Shown
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 21.09.2006 (Чт) 21:50

Благодарю за участие!
Обход щекотливого момента ясен. Жаль только, что причина для него конкретно необъяснима! Только догадки :(
Век живи - век учись!
www.detal-plast.narod.ru

temur
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.02.2005 (Чт) 21:17
Откуда: Georgia

Сообщение temur » 21.09.2006 (Чт) 22:09

Nord777
Мой предыдущий пост был адресован Чудику
temur, я не понял, с чего ты взял, что новый добавленный столбец имеет индекс 0? Элементарное

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


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList