2013-08-26 3 views
0

나는 rdlc 파일에서 보고서 항목 요소 값의 속성을 찾고 변경하려고합니다. ,deserialized rdlc 파일에서 rdlc 보고서 항목을 변경하는 방법은 무엇입니까?

using (TextReader textReader = new StreamReader(RdlcPath, Encoding.UTF8)) 
     { 
      var serializer = new XmlSerializer(typeof(SampleRDLSchema.Report)); 
      Report instance = (SampleRDLSchema.Report)serializer.Deserialize(textReader); 
      textReader.Close(); 
     } 

하지만 지금은 보고서 항목 요소 값의 변화를 얻을 수있는 방법 제이미 F처럼

+2

XML 조작으로 왜 이것을 변경 하시겠습니까? 기본 데이터를 기반으로 변경하려는 경우 수식을 사용하여 속성을 설정할 수 있습니다. 이것들은 보고서 실행시 계산되는 동적 속성을 생성합니다. –

답변

1

진술 (예를 들어 테이블 릭스의 폭 또는 텍스트 상자의 내용을 변경) : 내가 xsd.exe 도구를 ReportDefinition.xsd를 직렬화 복원? 보고서의 속성에 수식과 표현식을 사용하는 것이 더 쉽습니다. 그러나 XML 조작을 통해이 작업을 수행하려는 경우 deserialize 된 객체 대신 xml을 변경하는 것이 좋습니다. 내가 이것을 말하는 이유는 그것이 더 깨끗하기 때문입니다. 역 직렬화 된 객체를 사용하면 루프를 수행해야하며 각 객체가 원하는 노드인지 확인한 다음 원하는 노드를 찾을 때까지이 프로세스를 계속 진행하십시오.

개체가 직렬화되고 문자열처럼 XML 형식 인 경우 XElement를 사용하여 원하는 항목을 빠르게 가져올 수 있습니다. 예 : 보고서 정의 (파일 xml 문자열)에서 보고서의 너비를 가져 오는 데이 값을 사용합니다.

public String GetWidth() 
{ 
    XElement Report = XElement.Parse(this._ReportDefinition); 
    return Report.Element({http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition}Width").Value; 
} 

또는 또 다른 예

이 당신에게 도움이다

// The grabs the names of all tablix report items from the report definition. 
    public String GetReportItemName(String DataSetName) 
    { 
     XElement Report = XElement.Parse(this._ReportDefinition); 

     String ReportItemName = String.Empty; 
     XElement Body = Report.Element("{http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition}Body"); 
     XElement ReportItems = Body.Element("{http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition}ReportItems"); 
     foreach (XElement ReportItem in ReportItems.Elements()) 
     { 
      if (ReportItem.Name == "{http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition}Tablix") 
      { 
       String Name = ReportItem.Element("{http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition}DataSetName").Value; 

       if (Name == DataSetName) 
       { 
        ReportItemName = ReportItem.Attribute("Name").Value; 
       } 
      } 
     } 

     return ReportItemName; 
    } 

희망.