Страница 1 из 1

Использование Enum в отчёте

Добавлено: 31 июл 2014, 16:47
goodwen
Здравствуйте, я имею бизнес следующую бизнес модель:

Код: Выделить всё

public enum AuditReportType
{
    AuditQualityManagementSystem = 0,
    AuditEnvironmentalManagementSystem = 1,
    AuditSafetyLabourAndhealthManagementSystem = 2,
    Full = 3
}

public class AuditReportDto
{
    public AuditReportType AuditReportType { get; set; }
    public string AuditType { get; set; }
    public string AuditPurpose { get; set; }
    public string RevisionBasis { get; set; }
    public string RevisedOrganizationStructureName { get; set; }
    public DateTime RevisionEndDate { get; set; }
    public DateTime ActCreationDate { get; set; }
    public DateTime RevisionBeginDate { get; set; }
    public string ActCreationPlace { get; set; }
    public WorkerReportDto ApprovingWorker { get; set; }
    public ICollection<WorkerReportDto> Commissioners { get; set; }
    public ICollection<ViolationsGroupedByOrganizationStructureReportDto> Violations { get; set; }
    public ICollection<RevisionConclusionReportDto> Conclusions { get; set; }
    public ICollection<RevisionRecommendationReportDto> Recommendations { get; set; }
}
Я хочу в отчёте использовать примерно следующим образов свойство типа AuditReportType (Enum):

Код: Выделить всё

//Псевдокод
if (DataSource.AuditReportType == "AuditQualityManagementSystem")
{
     "Надпись 1"
}
Я пытался в отчёте записать следующим образом:

Код: Выделить всё

{IIF(DataSource.AuditReportType == 1,@"
АКТ
ПО РЕЗУЛЬТАТАМ АУДИТА 
системы менеджмента качества на соответствие требованиям 
стандарта ГОСТ ISO 9001-2011
","")}
Мне выдаётся следующая ошибка: Ошибка компиляции
В отчете 'Report' выявлена ошибка компиляции:'
Оператор "==" не может применяться к операндам типа "ProductionControl.Reports.ReportDtos.Revisions.AuditReportType" и "int".
Как я могу сравнить свойство типа Enum на определённое значение?

Re: Использование Enum в отчёте

Добавлено: 31 июл 2014, 16:48
goodwen
Если в функцию IIF подставляю DataSource.AuditReportType == "AuditQualityManagementSystem", то итог точно такой же.

Re: Использование Enum в отчёте

Добавлено: 01 авг 2014, 15:12
Aleksey
Здравствуйте,

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

Спасибо.

Re: Использование Enum в отчёте

Добавлено: 01 авг 2014, 15:39
Леонид
Добрый день!

Конечно, так работать не будет, ведь вы используете неверный синтаксис C#.

Как можно сравнивать 1 и перечисление типа AuditReportType? :o
Никак, т.к. 1 это по умолчанию struct System.Int32, а AuditReportType.AuditEnvironmentalManagementSystem - это enum AuditReportType. :!:

Проверил на вашем примере (извините за каламбур) - работает и просто из кода и через IIF.

Из кода так:

Код: Выделить всё

AuditReportDtoObj = new AuditReportDto();
AuditReportDtoObj.AuditReportType = AuditReportType.AuditEnvironmentalManagementSystem; // присваиваем какое-нибудь значение из перечисления (не цифру, а именно значение)

// сравниваем значение бизнес-объекта и значение перечисления
if (AuditReportDtoObj.AuditReportType == AuditReportType.AuditEnvironmentalManagementSystem)
{
  MessageBox.Show("1");
}
Из IIF так:

Код: Выделить всё

{IIF(AuditReportDtoObj.AuditReportType == AuditReportType.AuditEnvironmentalManagementSystem, "1", "0")}
"Набросал" полностью рабочий простейших пример для вашего класса, см. файл в приложении.