Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Зависимый combobox в DataGridView / 19 сообщений из 19, страница 1 из 1
19.08.2015, 11:44
    #39032178
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Всем доброго времени суток!

На форме есть DataGridView(DataGridView1). Добавляю в него 2 combobox-а. В первом - тип прибора, во втором- прибор.
Каким образом сделать, чтобы при выборе значения в первом combobox, во втором отфильтровывались значения.
На одиночной форме могу, ведь там combobox в списке контролов отображен, т.е. есть его события. А вот в DataGridView не могу понять как.

Что есть сейчас.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
  
   Dim ds1 As New DataSet
   Dim ds2 As New DataSet
   Dim cmbTypeDevice As New DataGridViewComboBoxColumn()
   Dim cmbNameDevice As New DataGridViewComboBoxColumn()
   Dim i as integer

   connection.Open()
   With DataGridView1     
     cmbTypeDevice.HeaderText = "Тип прибора"
     cmbNameDevice.HeaderText = "Наименование прибора"
     .Columns.Add(cmbTypeDevice) : cmbTypeDevice.FlatStyle = FlatStyle.Flat
     .Columns.Add(cmbNameDevice) : cmbNameDevice.FlatStyle = FlatStyle.Flat
   End With   
   
   Dim da1 As New OleDbDataAdapter("Select TypeDevice,id From tblTypeDevice Where Status=True Order By TypeDevice ASC", connection)
   Dim da2 As New OleDbDataAdapter("Select nDevice,id From tblNameDevice Where idTypeDevice=" & i & " Order By NameDevice ASC", connection)
   da1.Fill(ds1, "tblTypeDevice")
   da2.Fill(ds2, "tblNameDevice")
   With cmbTypeDevice
        .DataSource = ds1.Tables(0)
        .DisplayMember = "TypeDevice"
        .ValueMember = "id"
   End With
   connection.Close



Спасибо.
...
Рейтинг: 0 / 0
19.08.2015, 12:14
    #39032209
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Обычно всякие фильтры ставят над гридвью, в крайнем случае - справа-слева, а не внутри.
...
Рейтинг: 0 / 0
19.08.2015, 12:25
    #39032217
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Pallaris , спасибо, что ответили.
В данном случае реализую на основной форме, - подчиненные записи(один-ко-многим).
...
Рейтинг: 0 / 0
19.08.2015, 12:33
    #39032231
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Уточню. Речь идет о том, чтобы потом внести это все в две таблицы(главную и подчиненную) в БД.
...
Рейтинг: 0 / 0
19.08.2015, 13:55
    #39032331
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Уважаемые, неужели никто не делал никогда? Стандартная схема ведь, когда на главной - подчиненные записи есть/вносятся. Кто как добавляет данные в бд в таком случае, если не так?
Так много вариантов, я прям растерялся...
...
Рейтинг: 0 / 0
19.08.2015, 14:06
    #39032348
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Agapov_stasКто как добавляет данные в бд в таком случае, если не так?

Лично я делаю два грида - главный и подчиненный
...
Рейтинг: 0 / 0
19.08.2015, 14:07
    #39032352
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Pallaris , отлично. И что, в гриде только textbox-ы?
Есть зависимые combobox?
...
Рейтинг: 0 / 0
19.08.2015, 14:12
    #39032365
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Agapov_stas,
зависимые - это привязанные к полю? есть
...
Рейтинг: 0 / 0
19.08.2015, 14:14
    #39032371
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Pallaris , зависимые/каскадные/привязанные.
Выбрал в первом комбо тип прибора, во втором - отображены приборы этого типа.
...
Рейтинг: 0 / 0
19.08.2015, 14:16
    #39032374
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Pallaris есть
Как реализовано, можете показать?
...
Рейтинг: 0 / 0
19.08.2015, 14:37
    #39032408
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Agapov_stasВыбрал в первом комбо тип прибора, во втором - отображены приборы этого типа.

Первое комбо я размещаю вне грида, оно работает как фильтр. Не знаю, что вам показать
...
Рейтинг: 0 / 0
19.08.2015, 14:46
    #39032428
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
PallarisПервое комбо я размещаю вне грида, оно работает как фильтр. Не знаю, что вам показать
Мы о разном говорим. Вы говорите за комбо которое вне грида, я же говорю о ситуации когда два комбо находятся в гриде . Речь не о фильтрации данных, а о внесении.
...
Рейтинг: 0 / 0
19.08.2015, 14:47
    #39032432
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Выше приложен пикчер, о котором видимо имеете ввиду Вы.
Я говорю о:
...
Рейтинг: 0 / 0
19.08.2015, 14:59
    #39032446
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Agapov_stas,

тема много раз поднималась.
Делаем два BindingSource. К каждому привязан свой ComboBox. Устанавливаешь у comboBox свойства DataPropertyName, DisplayMember, ValueMember. Всё!
...
Рейтинг: 0 / 0
19.08.2015, 15:06
    #39032462
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
petalvikтема много раз поднималась.
Делаем два BindingSource. К каждому привязан свой ComboBox. Устанавливаешь у comboBox свойства DataPropertyName, DisplayMember, ValueMember. Всё!
Покажите, если не сложно. Потому как, Вы видимо, говорите за одиночную форму. Это мы умеем. В гриде - нет пока.
Если все так легко и Вы знаете как сделать, неужели так сложно пример показать?
...
Рейтинг: 0 / 0
19.08.2015, 15:56
    #39032543
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Agapov_stas,

неужели так сложно погуглить?
17093927 Да, это не совсем то, но суть та же самая.
Могу показать пример на C#.
...
Рейтинг: 0 / 0
20.08.2015, 07:03
    #39032829
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
petalvikAgapov_stas,

неужели так сложно погуглить?
17093927 Да, это не совсем то, но суть та же самая.
Могу показать пример на C#.
petalvik, спасибо за внимание, но то, что Вы предложили никак не относится к моему вопросу.

Вот похожий вопрос, буду тут и копать.

P.S. Надеюсь, все -таки кто-то откликнется.
...
Рейтинг: 0 / 0
20.08.2015, 16:17
    #39033329
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
Agapov_staspetalvik, спасибо за внимание, но то, что Вы предложили никак не относится к моему вопросу.
Ещё как относится. Вы главное два BindingSource создайте и сделайте привязку через них. У них и события можно будет использовать, паче возникнет такая необходимость.
...
Рейтинг: 0 / 0
21.08.2015, 07:12
    #39033620
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависимый combobox в DataGridView
petalvik , не сразу обратил внимание о чем Вы имели ввиду в указанной ссылке. Беру свои слова обратно.
Сделал, только немного иначе(не увидел смысла привязывать именно binding к первому комбо).
На Load формы:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
            Dim cmbTypeDevice As New DataGridViewComboBoxColumn
            Dim cmbNameDevice As New DataGridViewComboBoxColumn
            Dim da1 As New OleDbDataAdapter("Select * From tblTypeDevice", connection)
            Dim da2 As New OleDbDataAdapter("Select * From tblNameDevice", connection)
            Dim dt1 As New DataTable
            Dim dt2 As New DataTable
            da1.Fill(dt1)
            da2.Fill(dt2)
            ds.Tables.Add(dt1)
            ds.Tables.Add(dt2)

            With cmbTypeDevice
                .DataSource = ds.Tables(0)
                .DisplayMember = "TypeDevice"
                .ValueMember = "id"
                .FlatStyle = FlatStyle.Flat
            End With

            DataGridView1.Columns.Add(cmbTypeDevice)
            DataGridView1.Columns.Add(cmbNameDevice)


В событии DataGridView1_EditingControlShowing:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
            If DataGridView1.CurrentCell.ColumnIndex = 1 Then
                Dim control As ComboBox = CType(e.Control, DataGridViewComboBoxEditingControl)
                Dim bs As New BindingSource
                bs.DataSource = ds.Tables(1)
                bs.Filter = "idTypeDevice=" & Convert.ToInt32(DataGridView1.CurrentRow.Cells(0).Value.ToString()) & ""
                With control
                    .DataSource = bs
                    .DisplayMember = "nDevice"
                    .ValueMember = "id"
                    .FlatStyle = FlatStyle.Flat
                End With
            End If



Работает, но есть пара нюансов.
1. Когда "кликаешь" на комбо в гриде, то не сразу открывается список значений, только на 3 раз.
2. После того как выбрать значение в первом и втором комбо, а затем перейти на следующую запись/строку, то выдает сообщение/ошибку(см. аттач) и во втором комбо пропадает значение(которое введено было в первой записи)

Как исправить эти "эффекты" или что делаю не так?
Спасибо!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Зависимый combobox в DataGridView / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]