Регистрация связей програмно

отредактировано 11:12 Раздел: FastReport .NET
Перечитал всю документацию но так и не нашел как програмно добавить связь между двумя DataTable в обект Report-та и как потом использовать в "[...]"

Комментарии

  • отредактировано 11:12
    Iamik написал: »
    Перечитал всю документацию но так и не нашел как програмно добавить связь между двумя DataTable в обект Report-та и как потом использовать в "[...]"
    Я нашел такую возможность:
      DataSet ds = new DataSet();
      DataTable tParent = CreateParentTable(); // создаем и заполняем таблицу
      ds.Tables.Add(tParent);
      DataTable tChild = CreateChildTable(); // создаем и заполняем таблицу
      ds.Tables.Add(tChild);
      ds.Relations.Add("rParentChild", tParent.Columns["ID"], tChild.Columns["ID"]);
    
      report.RegisterData(ds);
      (report.FindObject("Data1") as DataBand).DataSource = report.GetDataSource("tParent");
      (report.FindObject("DataChild1") as DataBand).DataSource = report.GetDataSource("tChild");
      (report.FindObject("DataChild1") as DataBand).Relation = (FastReport.Data.Relation)report.FindObject("rParentChild");
      (report.FindObject("DataChild1") as DataBand).Relation.Enabled = true;
    
  • отредактировано 11:12
    А вот пошел дальше и натолкнулся на неприятную ситуацию.
    Если в DataSet добавляю еще одну таблицу и устанавливаю у нее связь с главной, данные из этой таблицы не отображаются:
      ...
      DataTable tChild2 = CreateChild2Table(); // создаем и заполняем таблицу
      ds.Tables.Add(tChild2);
      ds.Relations.Add("rParentChild2", tParent.Columns["ID"], tChild2.Columns["ID"]);
      
      ...
      (report.FindObject("Data2") as DataBand).DataSource = report.GetDataSource("tParent");
      (report.FindObject("DataChild2") as DataBand).DataSource = report.GetDataSource("tChild2");
      (report.FindObject("DataChild2") as DataBand).Relation = (FastReport.Data.Relation)report.FindObject("rParentChild2");
      (report.FindObject("DataChild2") as DataBand).Relation.Enabled = true;
    
    Причем, если не включать второй Relation, то данные отображаются (естественно все подряд). Есть у кого какие соображения?
  • отредактировано 11:12
    Alex Shulg написал: »
    Причем, если не включать второй Relation, то данные отображаются (естественно все подряд). Есть у кого какие соображения?
    Не, вру, мой косяк был при заполнении ID во второй подчиненной таблице... сорри, все работает.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.