Пользовательский код редактора выражений RLDC - PullRequest
2 голосов
/ 10 марта 2011

Я делаю отчет .rldc в локальном режиме, и мне сложно понять, как форматировать мои данные.Для одного поля элемента в источнике данных тип является классом, который имеет длину единицы и тип единицы.Мне интересно, возможно ли в редакторе выражений получить доступ к каждому из этих элементов объекта, который я передаю. Или мне придется передавать каждое свойство класса отдельно.Дайте мне знать, если мне нужно что-то объяснить лучше.

Вот класс, к которому я пытаюсь получить доступ

public class Measurement
{
    float value;
    Unit unit;

    public float Value
    {
        get { return value; }
        set { this.value = value; }
    }
    public Unit Unit
    {
        get { return unit; }
        set { unit = value; }
    }
}

И вот что я имею для выражения в текстовом поле

<Value>=Fields!Weight.Value.Value</Value>

Это раздел набора данных отчета, относящийся к этому

<Field Name="Weight">
   <DataField>Weight</DataField>
   <rd:TypeName>NewCalculator.Logic.Units.Measurement</rd:TypeName>
</Field>

Спасибо

1 Ответ

2 голосов
/ 10 марта 2011

Генератор отчетов без проблем отображает объекты со свойствами - хотя вы не получите поддержку intellisense.Это не работает в версии 10. сборки отчетов.

Укажите поле:

<Field Name="SomeClass"><DataField>SomeClass</DataField></Field>

Получите значение (при условии, что у вашего SomeClass есть свойство Id):

<Value>=Fields!SomeClass.Value.Id</Value>

или даже

<Value>=Fields!SomeClass.Value.X.Y.Z.Id</Value>

, если ваша иерархия классов идет таким образом.

Редактировать :

Предположим, у вас естькласс Body:

public class Body { public Measurement Weight { get; set; } ... }

Если вы свяжете свой источник данных следующим образом:

ReportDataSource rdsBodies = new ReportDataSource("Bodies",
  new Body[] { new Body(), new Body() });
localReport.DataSources.Add(rdsBodies);

и укажите свой <DataSet> следующим образом:

<DataSet Name="Bodies">
  <Fields>
    <Field Name="Weight"><DataField>Weight</DataField></Field>
  </Fields>
  <Query>
    <DataSourceName>DS</DataSourceName>
    <CommandText>Bodies</CommandText>
  </Query>
</DataSet>

значение

<Value>=Fields!Weight.Value.Value</Value>

должно отображаться без ошибок, если оно находится внутри List или Table с

<DataSetName>Bodies</DataSetName>
...