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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как работать с DataGridViewComboBoxColumn ? 
:(
    Опции темы
AntonVolnikh
Дата 5.7.2008, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здраствуйте всем.
Я новичок в C# так что не судите строго.
У  меня следующая проблема - есть DataSet dsMain в нем находятся два DataTable "RESELLERS" и "RESELLER_CARDS" 
в таблице "RESELLERS" есть ключевое поле "ID" а в таблице "RESELLER_CARDS" поле "RESELLER_ID"
Реактирование таблицы "RESELLER_CARDS" ведётся через DataGridView хочу в нем создать столбец типа DataGridViewComboBoxColumn
в котором будет отображаться поле "RESELLERS.NAME" а принималось значение "RESELLERS.ID".
и вот как я это делаю 
Код

this.RESELLER_ID = new System.Windows.Forms.DataGridViewComboBoxColumn();
....................
this.RESELLER_ID.Name = "RESELLER_ID";
this.RESELLER_ID.DataPropertyName = "RESELLER_ID";
this.RESELLER_ID.DataSource = this.dsMain;
this.RESELLER_ID.DisplayMember = "RESELLERS.NAME";
this.RESELLER_ID.ValueMember = "RESELLERS.ID";

выдаётся Exceprion - System.FormatException и  столбец принимает значение столбца "RESELLERS.ID".

Кто знает кде у меня ошибка?






PM MAIL   Вверх
Bogdan1024
Дата 5.7.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

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



Тоесть, чтобы тебе выводилось ResellerName, а если ты захочешь редактировать, то будешь редактировать ResellerId?


--------------------
user posted image
PM MAIL   Вверх
Partizan
Дата 5.7.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



если в таблице Resellers нет поля Name, то во-первых датасорс должен быть другой...а во вторых DisplayMember другой...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Grandpa
Дата 5.7.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как у тебя прога сможет разлечить какую из таблиц использовать для формирования items?! В dsMain у тебя две таблицы.
Создай BindingSource, укажи в нём в качестве DataSource свой dsMain, а в качестве DataMember - RESELLERS. Далее RESELLER_ID.DataSource = <имя BindingSource>.

Ещё.
Код

this.RESELLER_ID.DisplayMember = "NAME";
this.RESELLER_ID.ValueMember = "ID";
 без указания имени таблицы.

PM ICQ   Вверх
AntonVolnikh
Дата 5.7.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Grandpa зделал как ты сказал но всеровно при попыткм добавления записи столбец RESELLER_ID остоятся путым (NULL)
Код

            this.bindingSource1.DataSource = this.dsMain;
            this.bindingSource1.DataMember = "RESELLERS";

            this.RESELLER_ID.DataSource = this.bindingSource1;
            this.RESELLER_ID.Name = "RESELLER_ID";
            this.RESELLER_ID.DisplayMember = "NAME";
            this.RESELLER_ID.ValueMember = "ID";


Да к томуже при заполнении грида столбец  RESELLER_ID остоётся пустым.

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


Новичок



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

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



А где
Код

this.RESELLER_ID.DataPropertyName = "RESELLER_ID"

PM ICQ   Вверх
AntonVolnikh
Дата 5.7.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Grandpa  но ведь в таблице "RESELLERS" нет поля "RESELLER_ID"?
Если добавить строку вида 
Код

this.RESELLER_ID.DataPropertyName = "RESELLER_CARDS.RESELLER_ID";

то результат тотже - столбец остаётся пустым.
PM MAIL   Вверх
Grandpa
Дата 5.7.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(AntonVolnikh @  5.7.2008,  14:30 Найти цитируемый пост)
Grandpa  но ведь в таблице "RESELLERS" нет поля "RESELLER_ID"?

Но оно есть в RESELLER_CARDS! Вы же ведёте редактирование в таблице RESELLER_CARDS поля RESELLER_ID, но просто вместо прямого ввода его значения, вы хотите воспользоваться перечнем из таблицы RESELLERS.  Таблица RESELLERS используется для построения свойства Items в Combobox-е (не напрямую!).  Для этого в свойстве DataPropertyName вы указывает поле RESELLER_ID таблицы RESELLER_CARDS. В DataSource - источник для перечня, т.е. посредством bindingSource таблицу RESELLERS. В DisplayMember -  NAME (таблицы RESELLERS) это будет отображаться в выпадающем списке. В ValueMemeber -  ID (таблица RESELLERS), это значение будет помещаться в поле RESELLER_ID (таблица RESELLER_CARDS).

PM ICQ   Вверх
AntonVolnikh
Дата 5.7.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Переделал вот так 
Код

this.bindingSource1.DataSource = this.dsMain;
this.bindingSource1.DataMember = "RESELLERS";

this.RESELLER_ID.Name = "RESELLER_ID";
this.RESELLER_ID.DataSource = this.bindingSource1;
this.RESELLER_ID.DataPropertyName = "RESELLER_ID";
this.RESELLER_ID.DisplayMember = "NAME";
this.RESELLER_ID.ValueMember = "ID";

но всё равно происходит Exception System.FormatException при заполнении грида.
PM MAIL   Вверх
Grandpa
Дата 5.7.2008, 19:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

this.bindingSource1.DataSource = this.dsMain;
this.bindingSource1.DataMember = "RESELLERS";

this.cBox.Name = "cBox";
this.cBox.DataSource = this.bindingSource1;
this.cBox.DataPropertyName = "RESELLER_ID";
this.cBox.DisplayMember = "NAME";
this.cBox.ValueMember = "ID";
 

Вроде всё верно. Я только заменил имя combobox-а, чтобы не путаться.

А как формируется dataGridView?  И уверены ли вы, что ID и RESELLER_ID имеют совпадающие значения?  Просмотрите таблицы менеджером. Вообще, данные в таблицы загружены? Посмотри в дебугере.

Чтобы разобраться сделайте проект с типизированым набором, т.е. используй дизайнер (если конечно вы в  MS VS). Т.е. не ручками, а дизайнером. А потом посмотрите сгенерированный код, очень полезно  smile 
 


Это сообщение отредактировал(а) Grandpa - 5.7.2008, 19:21
PM ICQ   Вверх
AntonVolnikh
Дата 6.7.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Grandpa Большое спасибо за совет!
Оказалось что в таблицах  "RESELLERS"  "RESELER_CARDS"  столбцы "ID" и "RESELLER_ID"соответствено разных типов.
в одной System.Int64 а во второй  System.String. Всё Заработало . СУППЕР...............
 smile 

Ещё раз большое спасибо !

PM MAIL   Вверх
Grandpa
Дата 6.7.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Небольшой совет. Чтобы не случались ошибки такого типа и для предотвращения нарушения целосности данных, свяжите в базе таблицы отношением один-ко-многим. Ваша ошибка была бы выявлена ещё на этапе создания отношения. Удачи.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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