Проблема с обработкой связей
Имеется датасет:
С помощью этих двух таблиц и двух связей надо вывести иерархию вида
- 1 Source Name 1
-- 2 Source Name 2
--- 3 Source Name 3
- 2 Source Name 2
-- 3 Source Name 3
и т.д.
пробовал сделать так:
при построении отчета получаю только вот это:
т.е. при сипользовании промежуточной таблицы, через которую идет связь, не удается получить даже вывод вида:
- 1 Source Name 1
-- 2 Source Name 2
отчет с примером прикрепляться не хочет, если надо могу выслать.
DataSet ds1 = new DataSet("Example 3");
//Creating data tables
DataTable sTable = new DataTable("sTable");
DataTable iTable = new DataTable("iTable");
//Creating data columns in data tables
//sTable
DataColumn sID = new DataColumn("sID", typeof(int));
sTable.Columns.Add(sID);
sTable.PrimaryKey = new DataColumn[] { sID };
DataColumn sName = new DataColumn("sName", typeof(string));
sTable.Columns.Add(sName);
DataColumn iSID = new DataColumn("iSID", typeof(int));
iTable.Columns.Add(iSID);
DataColumn iTID = new DataColumn("iTID", typeof(int));
iTable.Columns.Add(iTID);
//Fill tables with data
//sTable
DataRow sDr1 = sTable.NewRow();
sDr1[0] = 1; sDr1[1] = "Source Name 1";
DataRow sDr2 = sTable.NewRow();
sDr2[0] = 2; sDr2[1] = "Source Name 2";
DataRow sDr3 = sTable.NewRow();
sDr3[0] = 3; sDr3[1] = "Source Name 3";
sTable.Rows.Add(sDr1);
sTable.Rows.Add(sDr2);
sTable.Rows.Add(sDr3);
//iTable
DataRow iDr1 = iTable.NewRow();
iDr1[0] = 1; iDr1[1] = 2;
DataRow iDr2 = iTable.NewRow();
iDr2[0] = 2; iDr2[1] = 3;
DataRow iDr3 = iTable.NewRow();
iDr3[0] = 3; iDr3[1] = 1;
iTable.Rows.Add(iDr1);
iTable.Rows.Add(iDr2);
iTable.Rows.Add(iDr3);
ds1.Tables.AddRange(new DataTable[] { sTable, iTable });
DataRelation rel_S_to_I = new DataRelation("Source_to_Intersec", sTable.Columns["sID"], iTable.Columns["iSID"]);
DataRelation rel_I_to_S = new DataRelation("Intersec_to_Source", iTable.Columns["iTID"], sTable.Columns["sID"]);
ds1.Relations.AddRange(new DataRelation[] { rel_S_to_I , rel_I_to_S });
этот датасет передается в FastReportС помощью этих двух таблиц и двух связей надо вывести иерархию вида
- 1 Source Name 1
-- 2 Source Name 2
--- 3 Source Name 3
- 2 Source Name 2
-- 3 Source Name 3
и т.д.
пробовал сделать так:
при построении отчета получаю только вот это:
т.е. при сипользовании промежуточной таблицы, через которую идет связь, не удается получить даже вывод вида:
- 1 Source Name 1
-- 2 Source Name 2
отчет с примером прикрепляться не хочет, если надо могу выслать.
Комментарии
Для отчета master-detail-subdetail, как на первом скриншоте, нужны 3 разных таблицы. Вы пытаетесь использовать 2, что неправильно.
Для иерархии FastReport требуется 1 таблица с полями Id и ParentId (см. пример в демо). В Вашем случае проще будет из двух таблиц и двух связей сделать одну, и "скормить" ее FastReport.
Понятно, спасибо. В БД, откуда берутся данные, связи имеют более брутальный вид, чем в приведенном мной примере.
Еще я пробовал передать свои данные через SQLite, т.е. создал свой тип подключения. Все нормально заработало, только вот возникли вопросы:
1.Из подключения можно передать в FastReport только таблицы и отображения (view)?
2. Может ли FastReport использовать связи, имеющиеся в БД, и если может то, как их передать?
3. Почему в Query Designer`e, вкладке Designer не отображаются имена выбранных полей?
1) да, визард работает только с таблицами и представлениями
2) связи не читаются, их придется настраивать самому (в окне "Данные" - Действия/Новая связь)
3) попробовал у себя, имя отображается... Как повторить ошибку?
А на счет связей с которыми работает FastReport - я так понимаю это обычные DataRelation со всеми из ограничениями (столбец источника должен быть уникальным, для каждого дочернего столбца-цели должен существовать родитель)?
Может имеет смысл "подружить" FastReport с SQLite`ом, использовать SQLite в качестве словаря данных, со всеми его таблицами связями и пр.?
Для SQLite можно сделать коннектор, займусь этим в ближайшее время.
С подключением к SQLite как к БД проблем нет, необходимо именно работа со связами SQLite`а