Простой сеттер для управления текстовыми полями в ActiveReports

Как я могу получить доступ к элементу управления TextBox в ActiveReports 3.1. Когда я использую ActiveReport 6 или новее, следующий код работает как шарм (у меня есть Textbox с Name свойством "TextBox1"), но в версии 3.0 этот код неверен:

this.TextBox1.Text = "Test";

Появляется ошибка компиляции «нет определения TextBox1» (в 6.0), все работает нормально. Как я могу заставить этот код выполняться правильно? Вот код из файла rpx

<?xml version="1.0" encoding="utf-16"?>
<ActiveReportsLayout Version="3.1" PrintWidth="9360" DocumentName="ARNet Document" ScriptLang="C#" MasterReport="0">
  <StyleSheet>
    <Style Name="Normal" Value="font-family: Arial; font-style: normal; text-decoration: none; font-weight: normal; font-size: 10pt; color: Black" />
    <Style Name="Heading1" Value="font-size: 16pt; font-weight: bold" />
    <Style Name="Heading2" Value="font-family: Times New Roman; font-size: 14pt; font-weight: bold; font-style: italic" />
    <Style Name="Heading3" Value="font-size: 13pt; font-weight: bold" />
  </StyleSheet>
  <Sections>
    <Section Type="PageHeader" Name="PageHeader1" Height="360" BackColor="16777215" />
    <Section Type="Detail" Name="Detail1" Height="2880" BackColor="16777215">
      <Control Type="AR.Field" Name="TextBox1" Left="1700.787" Top="1247.244" Width="1360.63" Height="340.1574" Text="TextBox1" />
    </Section>
    <Section Type="PageFooter" Name="PageFooter1" Height="360" BackColor="16777215" />
  </Sections>
  <ReportComponentTray />
  <Script><![CDATA[public void Detail1_Format()
{
    this.TextBox1.Text = "test";
}public void ActiveReport_ReportStart()
{

}


]]></Script>
  <PageSettings />
  <Parameters />
</ActiveReportsLayout>

и вот ошибка введите здесь описание изображения


person user2201747    schedule 29.05.2013    source источник
comment
Он должен работать. Можете ли вы создать простой отчет и вставить весь код отчета в свой вопрос здесь?   -  person Scott Willeke    schedule 29.05.2013
comment
@scott, пожалуйста, найдите код в редакции вопроса   -  person user2201747    schedule 29.05.2013
comment
Это очень полезно! Пожалуйста, смотрите мой ответ ниже.   -  person Scott Willeke    schedule 30.05.2013


Ответы (2)


Похоже, вы используете сценарий в отчете на основе XML (.rpx), а не в отчете, основанном исключительно на коде. При использовании отчетов на основе XML (файлы .rpx) в более старых версиях ActiveReports вы должны получить доступ к элементам управления через коллекции следующим образом:

((DataDynamics.ActiveReports.TextBox)rpt.Sections["Detail1"].Controls["TextBox1"]).Text = "Hello World";

Однако в текущей версии ActiveReports (ActiveReports 7) это ограничение снято, поэтому вы можете писать код следующим образом:

this.TextBox1.Text = "Hello World";
person Scott Willeke    schedule 29.05.2013
comment
Я думаю, вы имеете в виду ((DataDynamics.ActiveReports.TextBox)rpt.Sections["Detail1"].Controls["TextBox1"]).Text = "Hello world";, пожалуйста, отредактируйте ответ - person user2201747; 30.05.2013
comment
Дох! Я всегда сожалею, что не протестировал свой код! Да, добавил актерский состав. - person Scott Willeke; 30.05.2013

Можете ли вы убедиться, что в отчете есть элемент управления текстовым полем с именем «TextBox1»? В C# имена чувствительны к регистру. Возможно, вместо этого есть один с именем «textBox1».

person Rajnish Sinha    schedule 29.05.2013
comment
Я абсолютно уверен, что имя правильное. В ActiveReports 6 тот же код работает без ошибок. - person user2201747; 29.05.2013
comment
Я думаю проблема с пространствами имен, но что может быть не так?? Нет ли определения элементов управления xml и обработчиков С# в одном и том же пространстве имен? - person user2201747; 29.05.2013