Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
wrq2017
2 / 2 / 2
Регистрация: 30.07.2017
Сообщений: 212
1

Отображение столбца типа DataGridViewComboBoxColumn

10.08.2017, 21:47. Просмотров 311. Ответов 2
Метки нет (Все метки)

Добрый день!
В заполненную из БД таблицу DataGridView добавляю колонку типа DataGridViewComboBoxColumn
C#
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
26
27
28
29
30
31
        private void addColumnToGrid(DataGridView dgv, BindingSource bs, string sqlquery, string columnName, string valueFill, int displayIndex)
        {
            DataGridViewComboBoxColumn cbc = new DataGridViewComboBoxColumn();
            cbc.HeaderText = columnName;
            cbc.Name = columnName;
            constants.loadCB(cbc, bs, sqlquery);
            cbc.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
            dgv.Columns.Add(cbc);
            for (int i = 0; i < dgv.RowCount; i++)
            {
                dgv[columnName, i].Value = dgv[valueFill, i].Value;
            }
            dgv.Columns[columnName].DisplayIndex = displayIndex;
 
        }
 
 public static void loadCB(DataGridViewComboBoxColumn cb, BindingSource bs, string sqlcomm)
        {
            try
            {
                DataTable dt = new DataTable();
                OleDbCommand cmd1 = new OleDbCommand(sqlcomm, new OleDbConnection(constants.connectionString));
                OleDbDataAdapter da = new OleDbDataAdapter(cmd1); ;
                da.Fill(dt);
                bs.DataSource = dt;
                cb.DataSource = bs;
                cb.DisplayMember = "fValue";
                cb.ValueMember = "id";
                da.Dispose();
                dt.Dispose();
            }
Как видно из кода значения ячеек добавляемого столбца берутся из ранее добавленного столбца таблицы БД. Всё нормально работает, если DataGridView находится на активной закладке tabControl, если нет, то в добавляемую таблицу привязывается комбо-бокс, но все значения отсутствуют (видимо null). Почему так? В какую сторону копать?

Причем, что характерно на первой закладке tabControl есть другая таблица, работающая по такому же принципу с добавлением двух столбцов типа DataGridViewComboBoxColumn и, ей без разницы, находится она на активной закладке или нет - всё отображается как надо. Не могу найти зависимость.

Добавлено через 5 часов 16 минут
Понимаю, что кривое решение, но помогла активация второй закладки Tabcontrol перед заполнением второй таблицы
C#
1
tabControl1.TabPages[1].Show();
Причем самого переключения на вторую закладку не происходит. Почему так? Почему только на активном TabPage всё происходит нормально? Кто-нибудь с подобным поведением Tabcontrol/DataGridView сталкивался?
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2017, 21:47
Ответы с готовыми решениями:

Отображение суммы столбца access в текст боксе
Есть таблица access в форме windows, в таблице есть столбец с цифровым значением, и текст бокс на...

Изменение типа столбца DataGridView после его заполнения из бд
Здравствуйте. Есть DataGridView, который заполняется следующим способом: ... CompDataAdapter...

Присвоить переменной типа string значение определенного столбца в таблице
Здравствуйте! Как на С# присвоить переменной типа string значение определенного столбца в таблице?

Сохранение данных из DataGridView с колонками типа DataGridViewComboBoxColumn
проблема заключается в следующем: есть компонент DataGridView, привязанная к первой таблице, одна...

2
Welcome20
51 / 45 / 31
Регистрация: 14.04.2015
Сообщений: 273
21.08.2017, 07:17 2
Цитата Сообщение от wrq2017 Посмотреть сообщение
но все значения отсутствуют (видимо null)

Мне кажеться в данном случае тебе поможет BindingSource.

Привяжи одну таблицу к одному, вторую ко второй и посмотри что да как движет твоей программой. И от этого отталкивайся
0
wrq2017
2 / 2 / 2
Регистрация: 30.07.2017
Сообщений: 212
21.08.2017, 08:59  [ТС] 3
Да, через BindingSource всё и сделано. Оставил всё как есть. Если будет у кого-то подобная проблема - решение в вызове метода .Show()
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2017, 08:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как сделать возможным ручной ввод значений в поле типа DataGridViewComboBoxColumn
Добрый день, Уважаемые! С# начал изучать недавно и столкнулся со следующей проблемой: Есть...

Ошибка "Преобразование значения типа varchar привело к переполнению столбца типа int" ?
Проблемы с SQL Server Создал таблицу: use LivlagsBar go IF EXISTS (SELECT name FROM...

Отображение определенного столбца таблицы
Как с помощью QSqlTableModel отобразить и разрешить редактирование только одного столбца: т.к. что...

Отображение столбца таблицы в Combobox
В общем есть БД на Mysql Там 2 таблицы films(f_id,name,g_id) и genre(g_id,g_name) На форме ADO...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.