Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программное заполнение DataGridView 
V
    Опции темы
Артур179
Дата 26.7.2011, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.7.2011

Репутация: нет
Всего: нет



Я работаю в Visual Studio 2010.
У меня создается DataGridView, не связанный с базой данных. В нем две колонки – текстовые, а одна – типа ComboBox. Когда я программно вношу данные, чтобы заполнить текстовые ячейки, то ячейка ComboBox показывает пустой список. Программный код вот:

Код

 Dim Cell1, Cell2, Cell3 As DataGridViewCell
        Dim Column2 As DataGridViewComboBoxColumn
        Dim Column1, Column3 As DataGridViewTextBoxColumn
        Dim row1 As DataGridViewRow


        Column1 = New DataGridViewTextBoxColumn()
        Column1.HeaderText = "Название1"
        Column1.Name = "Название1"
        Column1.Width = 300

        Column2 = New DataGridViewComboBoxColumn()
        Column2.Name = "Название2"
        Column2.HeaderText = "Название2"
        Column2.Visible = True
        Column2.Width = 100
        Column2.Items.AddRange(New String() {"1", "2", "3"})
        Column2.DefaultCellStyle.NullValue = "1"


        Column3 = New DataGridViewTextBoxColumn()
        Column3.HeaderText = "Название3"
        Column3.Name = "Название3"
        Column3.Width = 300

        DataGridView1.Columns.Add(Column1)
        DataGridView1.Columns.Add(Column2)
        DataGridView1.Columns.Add(Column3)


        Cell1 = New DataGridViewTextBoxCell()
        Cell2 = New DataGridViewComboBoxCell()
        Cell3 = New DataGridViewTextBoxCell()
        row1 = New DataGridViewRow()
        Cell1.Value = "DKFJKDJFKDF"
        Cell3.Value = "010101010"
        row1.Cells.Add(Cell1)
        row1.Cells.Add(Cell2)
        row1.Cells.Add(Cell3)
        DataGridView1.Rows.Add(row1)

Модератор: не забываем пользоваться тегами code

Как надо добавлять данные правильно?

Это сообщение отредактировал(а) diadiavova - 27.7.2011, 09:42
PM MAIL   Вверх
diadiavova
Дата 27.7.2011, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Артур179 @  26.7.2011,  18:10 Найти цитируемый пост)
У меня создается DataGridView, не связанный с базой данных.

Его можно связать просто с таблицей. 
Цитата(Артур179 @  26.7.2011,  18:10 Найти цитируемый пост)
 то ячейка ComboBox показывает пустой список

Комбобокс надо заполнить значениями. 
http://msdn.microsoft.com/ru-ru/library/sy...ueryresult=true


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Артур179
Дата 27.7.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.7.2011

Репутация: нет
Всего: нет



Цитата(diadiavova @ 27.7.2011,  09:55)
Комбобокс надо заполнить значениями. 
http://msdn.microsoft.com/ru-ru/library/sy...ueryresult=true


Я вроде бы так и сделал:
Код

        Column2 = New DataGridViewComboBoxColumn()
        Column2.Name = "Название2"
        Column2.HeaderText = "Название2"
        Column2.Visible = True
        Column2.Width = 100
        Column2.Items.AddRange(New String() {"1", "2", "3"})
        Column2.DefaultCellStyle.NullValue = "1"

Если я сам ввожу интерактивно новую строку в DataGrid, то в ячейке есть выбор из списка (1,2,3). Но в тех строках, которые внесены программно, список для выбора пуст. Значит, я неправильно вношу сами значения в ячейке вот здесь:
Код

        Cell1 = New DataGridViewTextBoxCell()
        Cell2 = New DataGridViewComboBoxCell()
        Cell3 = New DataGridViewTextBoxCell()
        row1 = New DataGridViewRow()
        Cell1.Value = "DKFJKDJFKDF"
        Cell3.Value = "010101010"
        row1.Cells.Add(Cell1)
        row1.Cells.Add(Cell2)
        row1.Cells.Add(Cell3)
        DataGridView1.Rows.Add(row1)

Как сделать так, чтобы в ячейке Cell2 сохранялся тот список для выбора, который указан для столбца Column2?
PM MAIL   Вверх
Артур179
Дата 27.7.2011, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.7.2011

Репутация: нет
Всего: нет



В конец программого кода дописал
Код


        DataGridView1.Rows.Add(row1)
        Cell0 = DataGridView1.Rows(1).Cells(1)
        Cell0.Items.AddRange(New String() {"1", "2", "3"})


Но все равно - в первой строке, которая заполнена программно, ячейка ComboBox раскрывается в пустой список. smile 
PM MAIL   Вверх
Суровый
Дата 28.7.2011, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.4.2009

Репутация: нет
Всего: 2



Артур179
Я не силен в VB, но мне кажется, что этим способом
Код

Cell0.Items.AddRange(New String() {"1", "2", "3"})

ты добавляешь один элемент типа "массив строк".

Скорее нужно написать
Код

Cell0.Items.AddRange("1", "2", "3")

чтобы добавить 3 элемента типа "строка".

Добавлено через 3 минуты и 39 секунд
Хотя скорее всего я ошибаюсь, т.к. в конечном итоге оба способа эквивалентны  smile 
PM MAIL   Вверх
diadiavova
Дата 28.7.2011, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Артур179 @  27.7.2011,  16:22 Найти цитируемый пост)
Но все равно - в первой строке, которая заполнена программно, ячейка ComboBox раскрывается в пустой список.

Трудно сказать, в чем именно проблема. Тут дело в том, что использование заполнения грида без привязки к таблицам - вообще не самый лучший способ его использования. Вполне может быть, что эта проблема вообще не решается. Я бы посоветовал все-таки создать DataSet добавить туда таблицу и привязать ее к гриду.

Это сообщение отредактировал(а) diadiavova - 28.7.2011, 22:40


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
krewin
Дата 29.7.2011, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 27.8.2009

Репутация: 1
Всего: 1



Вобще способ добавления строк в  DataGridView является одной из сильнейших заклинаний в програмирование VB. Для вызова этой магии следует применить следующее заклятие описанное ниже.
 smile 



Код


        'создаем в ручную колонки
        Dim column1 As New DataGridViewTextBoxColumn
        Dim column2 As New DataGridViewComboBoxColumn

        DataGridView1.Columns.Add(column1)
        DataGridView1.Columns.Add(column2)

        Dim comboCell As DataGridViewComboBoxCell 'необходим элемент ComboBoxCell

        Dim X As Integer = 0 ' это строка которую редактируем

        DataGridView1.Rows.Add()
        DataGridView1.Item(0, X).Value = "Строка1"
        comboCell = DataGridView1.Item(1, X)
        comboCell.Items.Add("элемент1")
        comboCell.Items.Add("123")


        X = 1

        DataGridView1.Rows.Add()
        DataGridView1.Item(0, X).Value = "строка2"
        comboCell = DataGridView1.Item(1, X)
        comboCell.Items.Add("1")
        comboCell.Items.Add("2")


 smile 
Фактически упоминаний как сделать это в http://msdn.microsoft.com нет, поэтому этим занимаются маги с родственных сайтов
PM MAIL   Вверх
Артур179
Дата 1.8.2011, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.7.2011

Репутация: нет
Всего: нет



Ребята, спаибо огромное за помощь! На самом деле, методом тыка так уже и сделал: сначала добавил пустую строку, а затем уже заполил по ячейкам. Логики, правда, так и не понял  smile 
PM MAIL   Вверх
krewin
Дата 1.8.2011, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 27.8.2009

Репутация: 1
Всего: 1



ставь галочку что проблема решена
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0726 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.