Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/67: Рейтинг темы: голосов - 67, средняя оценка - 4.75
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094

Изменение типа колонки в DataGridView

05.03.2012, 14:00. Показов 13701. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Каким образом можно после инициализации DataGridViwe изменить тип поля с DataGridViewTextBoxColumn на DataGridViewComboBoxColumn?
Данные о наборе колонок подтягиваются и DataTable в типизированном датасете.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2012, 14:00
Ответы с готовыми решениями:

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

Проверка наличия значение не null в ячейке компонента dataGridView колонки типа ComboBox
Доброго времени суток. Имеется компонент dataGridView на котором один из столбцов представляет собой комбобоксы. Мне требуется...

Изменение типа dataGridView
У меня в dataGridView автоматические добавлялись значения из БД. Мне нужно переприсвоить ячейки, но там, куда добавлялся тип int, нельзя...

17
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
05.03.2012, 19:01
Удалять имеющиеся и добавить новый, при этом указать sourcecolumn
1
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
05.03.2012, 19:55  [ТС]
Удалять имеющиеся
Звучит так будто надо удалить вообще все поля. А одно поле можно удалить? И сработает-ли после этого метод Update() адаптора?
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
05.03.2012, 20:08
тут два варианта:
1. ручками описать все колонки(правка столбцов) и указать для них DataProperty - имя колонки в источнике ресурсов.
2. сделать то же самое только в коде. (datagridview1.Columns.Add() .. )
...
возможно надо будет указать datagridview1.AutoGenerateColumn = false;

в таком случае привязка корректно отрабатывает.
1
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
05.03.2012, 20:13
Цитата Сообщение от _katon_ Посмотреть сообщение
А одно поле можно удалить?
Да
Цитата Сообщение от _katon_ Посмотреть сообщение
И сработает-ли после этого метод Update() адаптора?
Да
Пример:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        bindingSource1.DataSource = table
        If Me.Tag = "TransportRusumlari" Then
            Dim IDColumn As New DataGridViewTextBoxColumn
            IDColumn.HeaderText = "Коди"
            IDColumn.DataPropertyName = "Коди"
            Dim NomlanishiColumn As New DataGridViewTextBoxColumn
            NomlanishiColumn.HeaderText = "Номланиши"
            NomlanishiColumn.DataPropertyName = "Номланиши"
            Dim TuriColumn As New DataGridViewComboBoxColumn
            TuriColumn.HeaderText = "Тури"
            TuriColumn.DataPropertyName = "Тури"
            Dim bindingSource2 As New BindingSource()
            bindingSource2.DataSource = GetData("Select * From TransportTurlari")
            TuriColumn.DataSource = bindingSource2
            TuriColumn.DisplayMember = "Nomlanishi"
            TuriColumn.ValueMember = "ID"
            dgvTable.Columns.AddRange(IDColumn, NomlanishiColumn, TuriColumn)
        End If
        'dgvTable.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        dgvTable.DataSource = bindingSource1
1
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
05.03.2012, 20:59  [ТС]
Удалил строковое поле. Добавил поле типа DataGridViewComboBoxColumn... визуально вроде порядок, но данные не сохраняются. Подозреваю, что не заполнил какое-то свойство указывающее, что поле связано с источником данных:
C#
1
2
3
4
5
6
7
8
this.dataGridView1.Columns.Remove("CountryID");
DataGridViewComboBoxColumn cbc = new DataGridViewComboBoxColumn();
cbc.Name = "CountryID";
cbc.HeaderText = "Страна";
cbc.DataSource = this.countryBindingSource;
cbc.DisplayMember = "Name";
cbc.ValueMember = "ID";
this.dataGridView1.Columns.Add(cbc);
Можно что-то сделать, чтобы не надо было отключать автогенерацию Columns?
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
05.03.2012, 21:06
_katon_, не указан DataPropertyName. Рекомендую не удалять колонки, а скрывать ненужную.
1
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
05.03.2012, 21:17  [ТС]
Так тут же весь смысл в том чтобы не переписывать запрос на вставку. В идеале хотелось бы чтобы можно было в гриде сменить тип поля... Только насколько я знаю так делать нельзя!!!
Подозреваю, что наличие двух полей с одинаковым названием в гриде вызовот эксепшен. А даже если и не вызовут, то как будут обнавляться даннные? По какому полю из двух?

Заполнение свойства DataPropertyName не дало результата.
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
05.03.2012, 21:38
"Сменить тип поля" - означает сменить тип объекта. Это не реализуемо в принципе. Связь с данными идёт не по названию колонки (я его вообще не присваиваю), а по DataPropertyName. Обновляться будет по обоим колонкам, при изменении в одной, будет изменяться источник данных и соответственно изменится значение в другой колонке.
1
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
05.03.2012, 22:03  [ТС]
serg42, coderxx спасибо я разобрался! Вы оба был с самого начала правы. DataPropertyName указывает наименование поля в источнике данных с которым нужно связать поле. Я нефольно дезинформировал, что ничего не вышло, потому, что по ошибке указал не верное наименование поля))) Как только я обнаружил и исправил ошибку все Update сразу же прошли!

Кстати, serg42, Remove я все равно сделал! Если есть время, то объясни почему считаешь, что лучше этого не делать. Мое мнение такое, что держать две копии одних и тех же данных бессмысленно!))
Вот код импровизированного динамичног изменения типа колонки:
C#
1
2
3
4
5
6
7
8
9
10
11
                    
SetDataSource(this.cityBindingSource);
this.dataGridView1.Columns.Remove("CountryID");
DataGridViewComboBoxColumn cbc = new DataGridViewComboBoxColumn();
cbc.Name = "CountryID";
сbc.DataPropertyName = "CountryID";
cbc.HeaderText = "Страна";
cbc.DataSource = this.countryBindingSource;
cbc.DisplayMember = "Name";
cbc.ValueMember = "ID";
this.dataGridView1.Columns.Add(cbc);
Метод SetDataSource(this.cityBindingSource) задает источники данных для объектов и позволяет уменьшить количество кода:
C#
1
2
3
4
        private void SetDataSource(BindingSource bs)
        {
            this.dataGridView1.DataSource = this.bindingNavigator1.BindingSource = bs;
        }
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
06.03.2012, 11:05
Цитата Сообщение от _katon_ Посмотреть сообщение
Кстати, serg42, Remove я все равно сделал! Если есть время, то объясни почему считаешь, что лучше этого не делать. Мое мнение такое, что держать две копии одних и тех же данных бессмысленно!))
Я так понял, что оба типа колонки используются. Зачем ненужную колонку создавать, а потом удалять?
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
06.03.2012, 11:19  [ТС]
Потому, что используется автоматическая генерация колонок. Т.е я ее не создаю, а получаю уже готовую после определения источника данных для DataGrid.
При автоматической генерации все поля в гриде строковые, что в общем-то меня и не устраивало. Ответил на вопрос?

Добавлено через 1 минуту
Не нужно использовать только один тип колонки. Колонка строковая абсолютно бессмысленная!
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
06.03.2012, 17:07
Насколько я помню, после генерации тип колонки можно менять в свойствах грида. Там ColumnsCollection или что-то типа того.
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
06.03.2012, 17:27  [ТС]
Я не нашел способа сменить тип колонки! И по-моему это сделать нельзя! Если все таки можно, то будет здорово!
0
124 / 106 / 7
Регистрация: 14.02.2010
Сообщений: 263
06.03.2012, 17:48
Свойства грида -> Columns -> Проектирование -> ColumnType.
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
06.03.2012, 18:05  [ТС]
Про этот способ указать тип колонки в гриде я знаю)))!!!
Дело в том, что один и тот же грид у меня используется для нескольких источников данных. Поэтому с дизайнером для настройки DataGridViwe я работать не могу. Колонки в гриде генерируются автоматически только после того как был присоединен DataSource, т.е. в момент выполнения программы.

DataGridViewColumn не содержит указанного свойства.
0
 Аватар для Maj0r
1 / 1 / 0
Регистрация: 25.10.2013
Сообщений: 25
29.10.2013, 10:23
Прошу прошения за никрофилию(поднятие старых тем), но возник вопрос а как-же все-таки сменить тип? Просто если удалить столбец типа text и добавить combobox с тем-же id именем и т.д. то апдейт так и не работает... адаптер не видит изменений... а следовательно Updtae() неработает....
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
30.10.2013, 13:12  [ТС]
Все должно работать. Вам нужно разобраться, что не так с запросами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.10.2013, 13:12
Помогаю со студенческими работами здесь

Изменение типа данных в столбце dataGridView
Всем здравствуйте. Столкнулся с проблемой, что при сортировке таблицы по значениям в определенном столбце корректно можно отсортировать...

Изменение типа конкретного столбца dataGridView
Здравствуйте! Уточню сабж: вывожу данные из MSSQL таким нехитрым способом: DataTable dt = new DataTable(); ...

Программное изменение типа столбца в DataGridView
Подскажите пожалуйста как мне в программе (не в дизайнере) поменять тип столбца, необходимо установить DataGridViewCheckBoxColumn. VS...

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

Сортировка колонки DataGridView по значениям другой колонки
Подскажите решение проблемы. Есть Grid. Нулевая колонка (с именем NOMER) содержит цифровые значения, которые удобно хранить в...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru