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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заполнить DataGridViewComboBoxColumn ? 
:(
    Опции темы
avg
Дата 17.12.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеется вот такая база данных из таблиц
user posted image
Нужно сделать форму с dataGridView1 для таблицы сотрудников
Причём колонка профессия должна состоять из DataGridViewComboBoxColumn (должна представлять из себя ComboBox),
в которых можно выбрать название профессии.
ComboBox каким-то образом должен содержать столбцы из таблицы профессии "ИД" и "название". Тоесть когда
выбирается нужное название профессии -> в таблице сотрудники обновляется запись в поле профессия_ид кодом
данной профессии, который соответствует названию данной выбранной профессии.
PM MAIL   Вверх
1stain
  Дата 17.12.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

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



загоняешь эти таблицы в датасет, для грида выбираешь DataSource = таблица "Сотрудники", меняешь тип колонки профессия на DataGridViewComboBoxColumn, для него ставишь DataSource = таблица "Профессии", DisplayMember = Title, ValueMember = ID


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
cASSAndra
Дата 25.1.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а можно ли заполнять DataGridViewComboBoxColumn без использования dataSet и т.п.? У меня в DataGridView всего одна строка и несколько колонок в виде ComboBox (можно было бы просто наставить комбобоксов, но с датагрид выглядит красивее  smile ). Как зашить возможные значения не в программном коде я нашла:
DataGridView Task -> Edit Columns -> выбираем колонку из списка -> Column Type ставим DataGridViewComboBoxColumn -> добавляем возможные значения в Items Collection.
Но у меня ситуация такая: из файла в класс считываются все возможные для колонки значения (список допустимых значений редактируется в др. месте). 
класс ListParamPatch с полями, которые представляют из себя массивы возможных значений для ячеек таблицы:
            RecordTypes 
            NameSystems
            PasswordSystems и т.д.

мне обязательно создавать dataSet и т.п. или можно сделать проще? smile 
PM MAIL   Вверх
IApple
Дата 25.1.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



PM MAIL   Вверх
cASSAndra
Дата 25.1.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, почитаем  smile 
PM MAIL   Вверх
cASSAndra
Дата 4.2.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а как сделать, чтобы в comboBox, который встроен в dataGridView можно было вводить кроме значений из списка что-то ещё? как это у обычного comboBox - можно выбрать, а можно и с клавиатуры значение ввести.  smile 
PM MAIL   Вверх
cASSAndra
Дата 5.2.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нашла  smile 

Код

private void dataGridViewPatchData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            {
                ComboBox c = e.Control as ComboBox;
                if (c != null)
                {
                    c.DropDownStyle = ComboBoxStyle.DropDown;
                }
            }
        }

        private void dataGridViewPatchData_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (e.ColumnIndex == dataGridViewPatchData.Columns[0].Index)
            {
                object eFV = e.FormattedValue;
                DataGridViewComboBoxCell cBoxCell = dataGridViewPatchData.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell;
                if (cBoxCell.Items.Contains(eFV) == false)                    
                {
                    cBoxCell.Items.Add(eFV);
                }                
            }
        }

PM MAIL   Вверх
cASSAndra
Дата 5.2.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



возник другой вопрос  smile :
при создании новой записи в comboBox (процедура dataGridViewPatchData_CellValidating) если написать

Код

cBoxCell.Value = eFV;


в ячейке всё равно стоит старое значение, а чтобы получить только что созданное значение, надо выбирать из списка.
нельзя ли сделать, чтобы сразу же ячейке присваивалось только что созданное значение?
PM MAIL   Вверх
cASSAndra
Дата 5.2.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



получается вот так  smile :


объявляем переменные

Код

    public partial class PatchForm : Form
    {
        string cellValue;   // то что надо занести в ячейку
        bool flagFillCell;  // 
        flagFillCell = false;




Код

        private void dataGridViewPatchData_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (e.ColumnIndex == dataGridViewPatchData.Columns[0].Index)
            {
                object eFV = e.FormattedValue;                
                DataGridViewComboBoxCell cBoxCell = dataGridViewPatchData.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell;
                if (cBoxCell.Items.Contains(eFV) == false)                    
                {
                    cBoxCell.Items.Add(eFV);
                    cellValue = eFV.ToString();   // запоминаем значение
                    flagFillCell = true;   // 
                }                
            }
        }


и по окончанию редактирования ячейки 

Код

        private void dataGridViewPatchData_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (flagFillCell == true)
            {
                dataGridViewPatchData.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = cellValue;
                flagFillCell = false;
            }
        }        


вроде работает smile , но больно уж громоздко расписано. может как нибудь поизящнее можно?
PM MAIL   Вверх
MaxWave
Дата 5.4.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



sorry

Это сообщение отредактировал(а) MaxWave - 5.4.2008, 22:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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