Таблицы из разных источников данных

  • Автор темы prog_new
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

prog_new

Пишу на С# (точнее только начал) и столкнулся с проблемой ...
Есть два источника данных - SQL и Access. Создал DataSet, затащил одну таблицу из одного источника данных, другую таблицу - из другого. Создал связь между таблицами ...
Как отобразить поля из одной и другой таблицы одновременно в одном DataGrid.
Типа создать запрос
Select tab1.*, tab2.*
From tab1 INNER JOIN tab2 ON ... и отобразить в ОДНОМ DataGrid ?????????????
 
P

prog_new

Есть следуюшие варианты:
1) В виде обычной необработанной таблицы, которая берет данные из той и другой таблицы используя связи (связь установлена один ко многим)
2) Тоже в виде таблицы, только уже используя группировку и функции агрегирования, например sum ...

В любом случае данные не обновляемые, т.е. в чистом виде SELECT ...
Кроме того, DataGrid будет в простейшем виде, БЕЗ замены типа колонок на другой тип (например ComboBox или ему подобные)

Я ответил на поставленный вопрос или есть еще неясности? :D
 
P

prog_new

Спасибо ...
А на С# есть что либо похожее?
 
L

LuMee

Для: prog_new
По-простому, кажется, не получится.
Вариант 1: создать некий класс, который будет включать поля для всех требуемых колонок. Далее вручную формируешь коллекцию объектов этого класса, заполняя его данными из двух таблиц. После этого назначаешь эту коллекцию в качестве датасорса гриду
Вариант 2: придумать, как по-другому отобразить данные :) Например, в двух гридах, так чтоб при перемещении по строкам "главного" сообразно обновлялись данные в "подчиненном"
Вариант 3: сделать грид для дочерней таблицы, добавить вручную колонки, соответствующие полям главной. Для этих колонок написать обработчик события CellFormatting, который будет дергать данные из другого источника данных и подставлять в ячейки. Производительность будет не ахти, правда. Для ускорения данные родительской таблицы можно предварительно отобрать в DataView и искать в нем с помощью метода Select.
 
P

prog_new

Тут:


При подробном рассмотрении примера, обратил внимание, что таблицы берутся из одного источника ...
А у меня источники данных разные - и SQL и Access ... Получиться ли?
 
P

prog_new

Для: prog_new
По-простому, кажется, не получится.
Вариант 1: создать некий класс, который будет включать поля для всех требуемых колонок. Далее вручную формируешь коллекцию объектов этого класса, заполняя его данными из двух таблиц. После этого назначаешь эту коллекцию в качестве датасорса гриду
Вариант 2: придумать, как по-другому отобразить данные :) Например, в двух гридах, так чтоб при перемещении по строкам "главного" сообразно обновлялись данные в "подчиненном"
Вариант 3: сделать грид для дочерней таблицы, добавить вручную колонки, соответствующие полям главной. Для этих колонок написать обработчик события CellFormatting, который будет дергать данные из другого источника данных и подставлять в ячейки. Производительность будет не ахти, правда. Для ускорения данные родительской таблицы можно предварительно отобрать в DataView и искать в нем с помощью метода Select.

А такой вариант "гибрибный" из перечисленных выше ...
Создать вручную таблицу, которая включает все нужные поля из обеих таблиц...
Затем заполнить второстепенную таблицу (она маленькая и SQL - ная)
После этого пробежаться по полям второстепенной таблицы в цикле, одновременно заполняя в новой таблице поля, соответствующие второстепенной таблицы и вызывать метод FillBy, который будет грузить данные главной таблицы но не все, а только те, которые считали из второстепенной ... и тоже заполнять соответствующие поля новой таблицы ...
А потом подключить эту новую таблицу в гриду...
Как тебе такой вариант?
 
M

mms

При подробном рассмотрении примера, обратил внимание, что таблицы берутся из одного источника ...
А у меня источники данных разные - и SQL и Access ... Получиться ли?

Без разницы.

Суть моей ссылки проста как божий мир :)

1. Наследуемся от колонки отображающей текст.
2. Переписываем основные методы, отвечающией за отображение и поведение колонки.
2.1 Перекрываем GetColumnValueAtRow - тут возвращаем значение которые можно брать откуда угодно (хотите из дата тэйбла, хотите из файла, хотите из памяти) - вот тут оснавная суть того, что будет отображено в гриде.

Собственно всё, если надо добавить колонки, которые будут брать данные из других источников, добавляем наши самописанные колонки, которые будут показывать, то что нам надо.

В ссылке которую я приводил даже в виде примера всё расписано, правда на ВБ, но на сишарпе в точности тоже самое.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!