|
|
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
Всем ещё раз привет! Помогите, плиз, с такой вот задачей. Есть DataGridView, я заполняю его столбиками вручную. Примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Т.е. обычный столбик имеет тип DataGridViewTextBoxColumn Но в некоторых столбиках значения можно выбирать из списка, который будет подтягиваться из другой таблицы-справочника. Т.е. такие столбики должны иметь тип DataGridViewComboBoxColumn. Если значение столбика подтягивается из др таблицы, то его свойство Expression непустое. Но вот как получить эту самую таблицу-справочник, чтобы её значениями заполнить список допустимых значений? Буду очень-очень благодарен за любую помощь!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 15:23 |
|
||
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
Т.е. мне в коде нужно сделать проверку наподобие такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Или может быть я что-то неправильно понимаю... (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 15:43 |
|
||
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
Alexandr Alexandrovich Код: plaintext 1. ну так сделайте новый датаСорс настроенный на этот справочник и привяжите его к своему комбоБоксу... _______________ AnimeBay - аниме магазин, который Вас не разочарует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 19:06 |
|
||
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
Ну... Так можно было бы сделать, например, если бы в моей таблице только одно поле ссылалось на значение из отдельной справочной таблицы. Но таких полей несколько. И для каждого поля датаСорсом будет своя таблица, имя которой желательно не писать в коде. А сам код, создающий столбики, находится в цикле foreach с переменной диапазона dataColumn. Если захардкодить датаСорсы, но тогда это придётся делать для всех таблиц, а их очень много! Получается, что проблема в том, как узнать, имея только один объект dataColumn, на какую таблицу и на какое поле в ней он ссылается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 20:28 |
|
||
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
Alexandr Alexandrovich Получается, что проблема в том, как узнать, имея только один объект dataColumn, на какую таблицу и на какое поле в ней он ссылается? DataColumn.Table и DataColumn.ColumnName :) Но при чём здесь ComboBox? Как Вы его будете заполнять данными из таблицы-справочника когда он будет размещаться отдельно на форме а не в гриде к примеру? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 07:55 |
|
||
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
Alexandr AlexandrovichНу... Так можно было бы сделать, например, если бы в моей таблице только одно поле ссылалось на значение из отдельной справочной таблицы. Но таких полей несколько. И для каждого поля датаСорсом будет своя таблица, имя которой желательно не писать в коде. А сам код, создающий столбики, находится в цикле foreach с переменной диапазона dataColumn. Если захардкодить датаСорсы, но тогда это придётся делать для всех таблиц, а их очень много! Получается, что проблема в том, как узнать, имея только один объект dataColumn, на какую таблицу и на какое поле в ней он ссылается? мало что понял из вашего поста, но хочу сказать, что датаСорсы можно и динамически создавать ;) _______________ AnimeBay - аниме магазин, который Вас не разочарует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 09:45 |
|
||
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
WYPMAH, Да, у меня только динамическое создание. Как я сейчас вижу, я не чётко описал суть проблемы. Кто ясно мыслит, тот ясно излагает, а ясности мне пока не очень хватает... В следующем посте постараюсь нормально написать, что я хочу сделать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 16:08 |
|
||
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
skyANADataColumn.Table и DataColumn.ColumnName :) Но при чём здесь ComboBox? Как Вы его будете заполнять данными из таблицы-справочника когда он будет размещаться отдельно на форме а не в гриде к примеру?DataColumn.Table и DataColumn.ColumnName - вот ответ на мой вопрос )))) Прошу прощения, что так запутанно выражаю мысли... на самом деле я хочу вот чего: Мой интерфейс допускает 2 формы отображения данных : 1. Просмотр записей таблицы по одной за раз. Для этого для каждой таблицы нужно создать отдельный класс формы. Значения полей выводятся контролами TextBox, ComboBox, CheckBox и т.д., каждый из которых я привязваю к данным вручную. 2. Просмотр нескольких записей таблицы. Для этого нужна форма с гридом. Грид заполняется столбиками при помощи программного кода. Эта форма со гридом - общая для всех таблиц . Поэтому программный код, который строит столбики, должен быть универсальным (по крайней мере для существующих таблиц). Конечно, полностью универсальный код сделать не получится. Поэтому есть такие ограничения: Возможные типы данных: String, Int32, Double, Decimal, DateTime, TimeSpan В DataSet-е используются Relation-ы. Например, у меня есть Такая структура данных: Код: plaintext Id - первичный ключ Number CustomerId - вторичный ключ, ссылается на таблицу Customer, поле Id CustomerName - вычисляемое, тянется из таблицы Customer, поля "Name" OrderId - вторичный ключ, ссылается на таблицу Order, поле Id OrderNumber - вычисляемое, тянется из таблицы Order, поля "Number" Content Два Relation-а, касающиеся таблицы Task: "TaskCustomerId" - родительский столбик "Customer.Id", дочерний "Task.CustomerId" "TaskOrderId" - родительский столбик "Order.Id", дочерний "Task.OrderId" Таблица Customer : Id - первичный ключ Name Таблица Order : Id - первичный ключ Number Description Код, который строит столбики - это цикл foreach: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В теле цикла используем переменную dataColumn. Например, цикл остановился на поле "CustomerId". Тогда DataColumn содержит поле "CustomerId". Из DataColumn как-то нужно узнать, является ли "CustomerId" вторичным ключом. В данном случае ДА. Тогда из DataColumn нужно достать таблицу, на которую ссылается "CustomerId". Это таблица "Customer". Зная эту информацию, создаём столбик dataGridViewComboBoxColumn типа DataGridViewComboBoxColumn. В его свойство DataSource пишем таблицу "Customer". dataGridViewColumn.ValueMember = "CustomerId"; dataGridViewColumn.DisplayMember = "CustomerName"; Я не знаю, как сделать то, что я выделил цветом... Если у Вас есть идеи, как это сделать, подсажите, плиз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 17:47 |
|
||
|
Заполнение DataGridView столбиками
|
|||
|---|---|---|---|
|
#18+
По поводу этой проблемы могу сделать заключение - универсального кода написать не удалось, но всё, что хотел, я сделал. Скорее всего DataColumn, ссылающийся на поле-вторичный ключ, не содержит информации о том, на какую родительскую таблицу и на какое поле в ней ссылается это поле (вторичный ключ). Но источник данных у меня теперь - BindingSource, а он даже такого понятия, как DataTable не содержит. Поначалу вообще не понимал, как с BindingSource я буду строить столбики, у него ведь нету коллекции DataColumn. Но если взять из датаСета нужную таблицу, по её коллекции объектов DataColumn постоить столбики в DataGridView, то этот грид отлично заполняется данными из BindingSource. Получается, что BindingSource-у нужно от DataGridView всего лишь текстовые названия полей - куда что ложить. Не судите строго за абстактные выражения в моих постах. Понимание предметной области появляется, но медленно... Особенная благодарность skyANA за ссылки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2010, 03:18 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=62&tid=1351478]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 408ms |

| 0 / 0 |
