Udostępnij za pośrednictwem


Tworzenie składnika niestandardowego raportu element czasu projektowania

element raportu niestandardowy element projektu -czas składnik jest używany w środowisku Visual Studio Designer element raportuu.Element element raportu niestandardowy projekt -czas składnik zapewnia powierzchni aktywowanego projektu, który może akceptować operacji przeciągania i upuszczania, integracja z Visual Studio właściwość przeglądarki i możliwość wyświetlania właściwość niestandardowych edytorów.

Z niestandardowego element raportuu element projektu -czas składnik użytkownika można umieścić element element raportuu niestandardowego element raportuu w środowisku projektowym, ustawić właściwości niestandardowe dane element raportuu niestandardowego elementu, a następnie Zapisz element raportu niestandardowy element w ramach projektu element raportuu.

Właściwości, które są ustawiane przy użyciu projektu -czas składnika w środowisku programistycznym są szeregowane rozszeregować środowisko projektowania hosta i następnie przechowywane jako elementy w pliku Report Definition Language (RDL).Gdy element raportu jest wykonywane przez procesor element raportuu, właściwości, które są ustawiane przy użyciu projektu -czas składnika są przekazywane przez procesor element raportuu do uruchomienia elementu element raportuu niestandardowego -czas składnik, który renderuje element raportu niestandardowy element i przekazuje go procesora element raportuu.

Ostrzeżenie

The custom report item design-time component is implemented as a Microsoft .NET Framework component.Ten dokument będzie opisywać szczegóły implementacji specyficznych dla projektu raportu niestandardowego element -czas składnika.Aby uzyskać więcej informacji o tworzeniu składników za pomocą .NET Framework, zobacz składniki w programie Visual Studio w bibliotece MSDN.

Przykładowy element w pełni zaimplementowana element raportu niestandardowy, zobacz SQL Server Reporting Services próbek produktu.

Implementowanie składników czasu projektowania

Główna klasa niestandardowy raport element projektu -czas składnik jest dziedziczona z Microsoft.ReportDesigner.CustomReportItemDesigner klasyOprócz standardowych atrybut, które są używane do .NET Framework formantu, należy zdefiniować klasy składnika CustomReportItem atrybut.Atrybut ten musi odpowiadać nazwie niestandardowej element raportu określone w pliku reportserver.config.Lista .NET Framework atrybutów, zobacz atrybuty w .NET Framework dokumentacji zestawu SDK.

Poniższy przykład kodu pokazuje atrybuty są stosowane do projektowania element raportu niestandardowego -czas kontroli:

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

    public class PolygonsDesigner : CustomReportItemDesigner
    {
...

Inicjowanie składnika

Przekazywanie określonych przez użytkownika właściwości element raportu niestandardowego za pomocą CustomData klasyImplementacji CustomReportItemDesigner klasy należy zastąpić InitializeNewComponent metoda, aby utworzyć nowe wystąpienie danego składnika CustomData klasy i zestaw go do wartości domyślnych.

Poniższy przykład kodu pokazuje przykład projektu elementu element raportuu niestandardowego -czas przesłanianie klasy składnika CustomReportItemDesigner.InitializeNewComponent metoda zainicjować składnika CustomData klasy:

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", ""));
        }

Modyfikowanie właściwości składnika

Można zmodyfikować CustomData Właściwości w środowisku projektowym na kilka sposobów.Można modyfikować żadnych właściwość, które są udostępniane przez projekt -czas składnika, które są oznaczone BrowsableAttribute atrybut za pomocą Visual Studio właściwość przeglądarki.Ponadto, można zmodyfikować właściwości przeciągając elementy na powierzchnię projektu element raportu niestandardowego lub prawym przyciskiem myszy formant w środowisku projektowym i wybierając Właściwości w menu skrótów, aby wyświetlić okno właściwości niestandardowe.

Następujący kod ilustruje przykład Microsoft.ReportDesigner.CustomReportItemDesigner.CustomData Właściwość BrowsableAttribute zastosowany atrybut:

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

Można podać projektu -czas z okno dialogowe Edytor właściwości niestandardowe składnika.Wdrożenia Edytor właściwość niestandardowych powinna dziedziczyć ComponentEditor klasy, a należy utworzyć wystąpienie dialogowego używanej do edycji właściwość.

W poniższym przykładzie implementacji klasy, która dziedziczy z ComponentEditor i wyświetla okno dialogowe Edytor właściwość niestandardowych:

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;
    }
}

Dialogowe Edytor właściwość niestandardowych można wywoływać Edytor wyrażeń Projektant raportów.W poniższym przykładzie Edytor wyrażeń jest wywoływana, gdy użytkownik zaznacza pierwszy element w polu kombi:

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;
   }
}

Za pomocą projektanta zleceń

Projektanta zlecenie jest polecenie menu, połączone z obsługa zdarzeń.Można dodać projektanta zleceń, które będą wyświetlane w menu skrótów składnika niestandardowe Zgłoś przedmiot Uruchom -czas formantu jest używany w środowisku projektowym.Lista dostępnych zleceń designer można powrócić z Uruchom -czas składnika za pomocą Verbs właściwość.

Poniższy przykład kodu pokazuje projektanta zlecenie i obsługa zdarzeń dodawanych do DesignerVerbCollection, jak również kod obsługi zdarzenie:

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();
}

Za pomocą skojarzenia

element raportu niestandardowy element klasy mogą także implementować Microsoft.ReportDesigner.Design.Adornment klasyzakończenie umożliwia sterowanie element raportu niestandardowego, zapewniające obszarów poza głównym prostokąt z powierzchni projektu.Obszary te można obsługiwać zdarzenia interfejs użytkownika, takie jak kliknięcie myszą i operacji przeciągania i upuszczania.The Adornment class that is defined in the Reporting Services Microsoft.ReportDesigner namespace is a pass-through implementation of the Adorner class found in Windows Forms.Pełna dokumentacja Adorner klasy, zobacz Omówienie usługi zachowanie w bibliotece MSDN.Przykładowy kod, który implementuje Microsoft.ReportDesigner.Design.Adornment klasy, zobacz SQL Server Reporting Services próbek produktu.

Aby uzyskać więcej informacji dotyczących programowania i używania Windows Forms w Visual Studio, zobacz następujące tematy w bibliotece MSDN:

  • Atrybuty projektowania składników

  • Składniki Visual Studio

  • Instruktaż: Tworzenie formantu Windows Forms, który korzysta z funkcji projektowania usługi Visual Studio