사용자 지정 보고서 항목 디자인 타임 구성 요소 만들기Creating a Custom Report Item Design-Time Component

사용자 지정 보고서 항목 디자인 타임 구성 요소는 Visual Studio 보고서 디자이너 환경에서 사용할 수 있는 컨트롤입니다.A custom report item design-time component is a control that can be used in the Visual Studio Report Designer environment. 사용자 지정 보고서 항목 디자인 타임 구성 요소는 끌어서 놓기 작업이 가능하고 Visual StudioVisual Studio 속성 브라우저와 통합되고 사용자 지정 속성 편집기를 제공하는 활성화된 디자인 화면을 제공합니다.The custom report item design-time component provides an activated design surface that can accept drag-and-drop operations, integration with the Visual StudioVisual Studio property browser, and the ability to provide custom property editors.

사용자 지정 보고서 항목 디자인 타임 구성 요소를 사용하여 사용자는 디자인 환경에서 보고서에 사용자 지정 보고서 항목을 배치하고, 사용자 지정 보고서 항목에 사용자 지정 데이터 속성을 설정한 다음, 사용자 지정 보고서 항목을 보고서 프로젝트의 일부로 저장할 수 있습니다.With a custom report item design-time component, the user can position a custom report item on a report in the design environment, set custom data properties on the custom report item, and then save the custom report item as part of the report project.

개발 환경에서 디자인 타임 구성 요소를 사용하여 설정된 속성은 호스트 디자인 환경에 의해 serialize 및 deserialize된 다음 RDL(Report Definition Language) 파일에 요소로 저장됩니다.The properties that are set using the design-time component in the development environment are serialized and deserialized by the host design environment and then stored as elements in the Report Definition Language (RDL) file. 보고서 처리기에 의해 보고서가 실행되면, 디자인 타임 구성 요소를 사용하여 설정된 속성을 보고서 처리기가 사용자 지정 보고서 항목 런타임 구성 요소로 전달하고, 이 런타임 구성 요소는 사용자 지정 보고서 항목을 렌더링한 뒤 다시 보고서 처리기로 전달합니다.When the report is executed by the report processor, the properties that are set using the design-time component are passed by the report processor to a custom report item run-time component, which renders the custom report item and passes it back to the report processor.

참고

사용자 지정 보고서 항목 디자인 타임 구성 요소는로 구현 된 MicrosoftMicrosoft .NET Framework.NET Framework 구성 요소입니다.The custom report item design-time component is implemented as a MicrosoftMicrosoft .NET Framework.NET Framework component. 이 문서에서는 사용자 지정 보고서 항목 디자인 타임 구성 요소와 관련된 구현 세부 사항을 설명합니다.This document will describe implementation details specific to the custom report item design-time component. 사용 하 여 구성 요소를 개발 하는 방법에 대 한 자세한 내용은 .NET Framework.NET Framework, 참조 Visual Studio의 구성 요소 MSDN 라이브러리에서.For more information about developing components using the .NET Framework.NET Framework, see Components in Visual Studio in the MSDN library.

완전히 구현 된 사용자 지정 보고서 항목의 샘플을 보려면 SQL Server Reporting Services 제품 샘플합니다.For a sample of a fully implemented custom report item, see SQL Server Reporting Services Product Samples.

디자인 타임 구성 요소 구현Implementing a Design-Time Component

사용자 지정 보고서 항목 디자인 타임 구성 요소의 주 클래스에서 상속 되는 Microsoft.ReportDesigner.CustomReportItemDesigner 클래스입니다.The main class of a custom report item design-time component is inherited from the Microsoft.ReportDesigner.CustomReportItemDesigner class. 에 사용 되는 표준 특성 외에 .NET Framework.NET Framework 컨트롤, 구성 요소 클래스를 정의 해야는 CustomReportItem 특성입니다.In addition to the standard attributes used for a .NET Framework.NET Framework control, your component class should define a CustomReportItem attribute. 이 특성은 reportserver.config 파일에 정의된 사용자 지정 보고서 항목의 이름과 일치해야 합니다.This attribute must correspond to the name of the custom report item as it is defined in the reportserver.config file. .NET Framework.NET Framework 특성 목록은 .NET Framework.NET Framework SDK 설명서에서 "특성(Attributes)"을 참조하십시오.For a list of .NET Framework.NET Framework attributes, see Attributes in the .NET Framework.NET Framework SDK documentation.

다음 코드 예제는 사용자 지정 보고서 항목 디자인 타임 컨트롤에 적용되는 특성을 보여 줍니다.The following code example shows attributes being applied to a custom report item design-time control:

namespace PolygonsCRI  
{  
    [LocalizedName("Polygons")]  
    [Editor(typeof(CustomEditor), typeof(ComponentEditor))]  
        [ToolboxBitmap(typeof(PolygonsDesigner),"Polygons.ico")]  
        [CustomReportItem("Polygons")]  

    public class PolygonsDesigner : CustomReportItemDesigner  
    {  
...  

구성 요소 초기화Initializing the Component

CustomData 클래스를 사용하여 사용자 지정 보고서 항목에 대해 사용자가 지정한 속성을 전달합니다.You pass user-specified properties for a custom report item using a CustomData class. 구현에서 CustomReportItemDesigner 클래스를 재정의 해야는 InitializeNewComponent 구성 요소의의 새 인스턴스를 만드는 메서드를 CustomData 클래스 및 기본 값으로 설정 합니다.Your implementation of the CustomReportItemDesigner class should override the InitializeNewComponent method to create a new instance of your component's CustomData class and set it to default values.

다음 코드 예제는 사용자 지정 보고서 항목 디자인 타임 구성 요소 클래스 재정의의 예를 보여 줍니다.는 CustomReportItemDesigner.InitializeNewComponent 구성 요소의 초기화 하려면 메서드 CustomData 클래스:The following code example shows an example of a custom report item design-time component class overriding the CustomReportItemDesigner.InitializeNewComponent method to initialize the component's CustomData class:

public override void InitializeNewComponent()  
        {  
            CustomData = new CustomData();  
            CustomData.DataRowHierarchy = new DataHierarchy();  

            // Shape grouping  
            CustomData.DataRowHierarchy.DataMembers.Add(new DataMember());  
            CustomData.DataRowHierarchy.DataMembers[0].Group = new Group();  
            CustomData.DataRowHierarchy.DataMembers[0].Group.Name = Name + "_Shape";  
            CustomData.DataRowHierarchy.DataMembers[0].Group.GroupExpressions.Add(new ReportExpression());  

            // Point grouping  
            CustomData.DataRowHierarchy.DataMembers[0].DataMembers.Add(new DataMember());  
            CustomData.DataRowHierarchy.DataMembers[0].DataMembers[0].Group = new Group();  
            CustomData.DataRowHierarchy.DataMembers[0].DataMembers[0].Group.Name = Name + "_Point";  
            CustomData.DataRowHierarchy.DataMembers[0].DataMembers[0].Group.GroupExpressions.Add(new ReportExpression());  

            // Static column  
            CustomData.DataColumnHierarchy = new DataHierarchy();  
            CustomData.DataColumnHierarchy.DataMembers.Add(new DataMember());  

            // Points  
            IList<IList<DataValue>> dataValues = new List<IList<DataValue>>();  
            CustomData.DataRows.Add(dataValues);  
            CustomData.DataRows[0].Add(new List<DataValue>());  
            CustomData.DataRows[0][0].Add(NewDataValue("X", ""));  
            CustomData.DataRows[0][0].Add(NewDataValue("Y", ""));  
        }  

구성 요소 속성 수정Modifying Component Properties

수정할 수 있습니다 CustomData 여러 가지 방법으로 디자인 환경에서 속성입니다.You can modify CustomData properties in the design environment in several ways. Visual StudioVisual Studio 속성 브라우저를 사용하여 BrowsableAttribute 특성으로 표시된, 디자인 타임 구성 요소에서 노출한 속성을 수정할 수 있습니다.You can modify any properties that are exposed by the design-time component that are marked with the BrowsableAttribute attribute by using the Visual StudioVisual Studio property browser. 사용자 지정 보고서 항목의 디자인 화면으로 항목을 끌어 또는 디자인 환경에서 컨트롤을 마우스 오른쪽 단추로 클릭 하 고 선택 하 여 속성을 수정할 수는 또한 속성 사용자 지정 속성 창을 표시 하려면 바로 가기 메뉴.In addition, you can modify properties by dragging items onto the custom report item's design surface, or by right-clicking the control in the design environment and selecting Properties on the shortcut menu to display a custom properties window.

다음 코드 예제는 Microsoft.ReportDesigner.CustomReportItemDesigner.CustomData 있는 속성은 BrowsableAttribute 특성이 적용:The following code example shows a Microsoft.ReportDesigner.CustomReportItemDesigner.CustomData property that has the BrowsableAttribute attribute applied:

[Browsable(true), Category("Data")]  
public string DataSetName  
{  
      get  
      {  
         return CustomData.DataSetName;  
      }  
      set  
      {  
         CustomData.DataSetName = value;  
      }  
   }  

디자인 타임 구성 요소를 사용자 지정 속성 편집기 대화 상자로 제공할 수 있습니다.You can provide your design-time component with a custom properties editor dialog box. 사용자 지정 속성 편집기 구현은 ComponentEditor 클래스에서 상속해야 하며, 속성 편집에 사용할 수 있는 대화 상자 인스턴스를 만들어야 합니다.The custom property editor implementation should inherit from the ComponentEditor class, and it should create an instance of a dialog box that can be used for property editing.

다음 예제는 ComponentEditor에서 상속되어 사용자 지정 속성 편집기 대화 상자를 표시하는 클래스의 구현을 보여 줍니다.The following example shows an implementation of a class that inherits from ComponentEditor and displays a custom property editor dialog box:

internal sealed class CustomEditor : ComponentEditor  
{  
   public override bool EditComponent(  
      ITypeDescriptorContext context, object component)  
    {  
     PolygonsDesigner designer = (PolygonsDesigner)component;  
     PolygonProperties dialog = new PolygonProperties();  
     dialog.m_designerComponent = designer;  
     DialogResult result = dialog.ShowDialog();  
     if (result == DialogResult.OK)  
     {  
        designer.Invalidate();  
        designer.ChangeService().OnComponentChanged(designer, null, null, null);  
        return true;  
     }  
     else  
        return false;  
    }  
}  

사용자 지정 속성 편집기 대화 상자에서 보고서 디자이너 식 편집기를 호출할 수 있습니다.Your custom property editor dialog box can invoke the Report Designer Expression Editor. 다음 예제에서는 사용자가 콤보 상자에서 첫 번째 요소를 선택하면 식 편집기가 호출됩니다.In the following example, the Expression Editor is invoked when the user selects the first element in the combo box:

private void EditableCombo_SelectedIndexChanged(object sender,   
    EventArgs e)  
{  
   ComboBox combo = (ComboBox)sender;  
   if (combo.SelectedIndex == 0 && m_launchEditor)  
   {  
      m_launchEditor = false;  
      ExpressionEditor editor = new ExpressionEditor();  
      string newValue;  
      newValue = (string)editor.EditValue(null, m_designerComponent.Site, m_oldComboValue);  
      combo.Items[0] = newValue;  
   }  
}  

디자이너 동사 사용Using Designer Verbs

디자이너 동사는 이벤트 처리기에 연결된 메뉴 명령입니다.A designer verb is a menu command linked to an event handler. 사용자 지정 보고서 항목 런타임 컨트롤이 디자인 환경에서 사용될 때 구성 요소의 바로 가기 메뉴에 표시할 디자이너 동사를 추가할 수 있습니다.You can add designer verbs that will appear in a component's shortcut menu when your custom report item run-time control is being used in the design environment. 사용 하 여 런타임 구성 요소에서 사용 가능한 디자이너 동사 목록을 반환할 수 있습니다는 동사 속성입니다.You can return the list of available designer verbs from your run-time component by using the Verbs property.

다음 코드 예제는 DesignerVerbCollection에 추가할 디자이너 동사 및 이벤트 처리기와 이벤트 처리기 코드를 보여 줍니다.The following code example shows a designer verb and an event handler being added to the DesignerVerbCollection, as well as the event handler code:

public override DesignerVerbCollection Verbs  
{  
    get  
    {  
        if (m_verbs == null)  
        {  
            m_verbs = new DesignerVerbCollection();  
            m_verbs.Add(new DesignerVerb("Proportional Scaling", new EventHandler(OnProportionalScaling)));  
         m_verbs[0].Checked = (GetCustomProperty("poly:Proportional") == bool.TrueString);  
        }  

        return m_verbs;  
    }  
}  

private void OnProportionalScaling(object sender, EventArgs e)  
{  
   bool proportional = !  
        (GetCustomProperty("poly:Proportional") == bool.TrueString);  
   m_verbs[0].Checked = proportional;  
   SetCustomProperty("poly:Proportional", proportional.ToString());  
   ChangeService().OnComponentChanged(this, null, null, null);  
   Invalidate();  
}  

도구 영역(adornment) 사용Using Adornments

사용자 지정 보고서 항목 클래스를 구현할 수도 Microsoft.ReportDesigner.Design.Adornment 클래스입니다.Custom report item classes can also implement a Microsoft.ReportDesigner.Design.Adornment class. 도구 영역(adornment)을 사용하면 사용자 지정 보고서 항목 컨트롤의 주 사각형 디자인 화면 바깥에 일정 영역이 생깁니다.An adornment allows the custom report item control to provide areas outside the main rectangle of the design surface. 이 영역은 마우스 클릭 및 끌어서 놓기 작업과 같은 사용자 인터페이스 이벤트를 처리할 수 있습니다.These areas can handle user interface events, such as mouse clicks and drag-and-drop operations. 장식 에 정의 된 클래스는 Reporting ServicesReporting Services Microsoft.ReportDesigner 네임 스페이스는의 통과 구현은 Adorner Windows Forms에 있는 클래스입니다.The Adornment class that is defined in the Reporting ServicesReporting Services Microsoft.ReportDesigner namespace is a pass-through implementation of the Adorner class found in Windows Forms. 에 대 한 전체 설명서는 표시기 클래스를 참조 하십시오. 동작 서비스 개요 MSDN 라이브러리에서.For complete documentation on the Adorner class, see Behavior Service Overview in the MSDN library. 구현 하는 샘플 코드는 Microsoft.ReportDesigner.Design.Adornment 클래스를 참조 하십시오. SQL Server Reporting Services 제품 샘플합니다.For sample code that implements a Microsoft.ReportDesigner.Design.Adornment class, see SQL Server Reporting Services Product Samples.

Visual StudioVisual Studio에서 Windows Forms를 프로그래밍하고 사용하는 방법은 MSDN Library에서 다음 항목을 참조하십시오.For more information about programming and using Windows Forms in Visual StudioVisual Studio, see these topics in the MSDN Library:

  • 구성 요소의 디자인 타임 특성Design-Time Attributes for Components

  • Visual StudioVisual Studio의 구성 요소Components in Visual StudioVisual Studio

  • 연습: Visual Studio 디자인 타임 기능을 활용 하는 Windows Forms 컨트롤 만들기Walkthrough: Creating a Windows Forms Control that Takes Advantage of Visual Studio Design-Time Features

관련 항목:See Also

사용자 지정 보고서 항목 아키텍처 Custom Report Item Architecture
사용자 지정 보고서 항목 런타임 구성 요소 만들기 Creating a Custom Report Item Run-Time Component
사용자 지정 보고서 항목 클래스 라이브러리 Custom Report Item Class Libraries
방법: 사용자 지정 보고서 항목 배포How to: Deploy a Custom Report Item