Aracılığıyla paylaş


Özel rapor madde tasarım zamanı bileşeni oluşturma

Özel rapor madde tasarım zamanı bileşeni Visual Studio Report Designer ortamında kullanılabilecek bir denetimdir. Özel rapor madde tasarım zamanı bileşeni sağlar bir etkin Tasarım yüzeyi, sürükle ve bırak işlemleri ile entegrasyon kabul eden Visual Studioözellik tarayıcısı ve özel özellik editörler sağlama yeteneğini.

Özel rapor madde tasarım zamanı bileşeni ile kullanıcı bir özel rapor madde tasarım ortamında rapor getirin, özel rapor madde özel veri özelliklerini ayarlamak ve özel rapor madde rapor projenin bir parçası olarak kaydedin.

Geliştirme ortamında tasarım zamanı bileşeni kullanılarak ayarlanır özellikleri seri ve ana tasarım ortamı tarafından serisi ve sonra öğeleri raporu tanım dili (rdl) dosyasında depolanır. Rapor, rapor işlemci tarafından yürütüldüğünde, tasarım zamanı bileşeni kullanılarak ayarlanan özellikler özel rapor madde işler ve geri rapor işlemciye geçirir bir özel rapor madde çalışma zamanı bileşeni rapor işlemci tarafından aktarılır.

[!NOT]

Özel rapor madde tasarım zamanı bileşeni olarak uygulanan bir Microsoft .NET Frameworkbileşen. Bu belge, uygulama ayrıntılarını özel rapor madde tasarım zamanı bileşeni için belirli anlatacağız. Kullanarak bileşenler geliştirme hakkında daha fazla bilgi için .NET Frameworkbakın bileşenleri Visual Studio MSDN Kitaplığı.

Tam olarak uygulanan özel rapor madde bir örnek için bkz: SQL Server Raporlama Hizmetleri ürün örnekleri.

Bir tasarım zamanı bileşeni uygulama

Özel rapor madde tasarım zamanı bileşeni ana sınıf devralınan Microsoft.ReportDesigner.CustomReportItemDesignersınıf Kullanılan standart özniteliklerine ek olarak bir .NET Frameworkkontrol, bileşenin sınıf tanımlamak a CustomReportItemözniteliği. Bu öznitelik, reportserver.config dosyasında tanımlanan özel rapor madde adına karşılık gelmelidir. Listesi için .NET Frameworköznitelikleri bkz: öznitelik .NET Frameworksdk belgelerine.

Aşağıdaki kod örneği, özel rapor madde tasarım zamanı denetimi için uygulanan öznitelikleri gösterir:

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

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

    public class PolygonsDesigner : CustomReportItemDesigner
    {
...

Initializing Component

Kullanıcı tarafından belirtilen özellikleri kullanarak bir özel rapor madde geçirmek bir CustomDatasınıf Uygulamanız, CustomReportItemDesignersınıf geçersiz InitializeNewComponentyöntemi, bileşenin yeni bir örneğini oluşturmak için CustomDatasınıf ve varsayılan değerleri ayarlayın.

Aşağıdaki örnek kod bir özel rapor madde tasarım zamanı bileşeni sınıfı geçersiz bir örnek gösterir CustomReportItemDesigner.InitializeNewComponentyöntemi bileşenin başlatmak için CustomDatasınıf:

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

Bileşen özellikleri değiştirme

Değiştirebileceğiniz CustomDataözellikleri çeşitli şekillerde tasarım ortamında. Tasarım zamanı bileşeni ile işaretlenen tarafından sunulan özellikleri değiştirebilirsiniz BrowsableAttributeözniteliğini kullanarak Visual Studioözellik tarayıcısı. Ayrıca, öğeleri özel rapor madde tasarım yüzeyi sürükleyerek veya tasarım ortamında denetimi sağ tıklatıp seçerek özelliklerini değiştirebilirsiniz Özellikler özel özellikleri penceresini görüntülemek için kısayol menüsü.

Aşağıdaki kod örneği gösterildiği bir Microsoft.ReportDesigner.CustomReportItemDesigner.CustomDataolan özelliğe BrowsableAttributeuygulanan özniteliği:

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

Tasarım zamanı bileşeni özel özellikler Düzenleyicisi iletişim kutusu sağlayabilir. Özel özellik düzenleyicisini uygulanması den alması gerektiğini ComponentEditorsınıf ve bu özelliğini düzenlemek için kullanılan bir iletişim kutusu örneğini oluşturmanız gerekir.

Aşağıdaki örnek dan devralan bir sınıf uygulaması gösterir ComponentEditorve bir özel özellik Düzenleyici iletişim kutusu görüntüler:

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

Özel özellik Düzenleyici iletişim kutusu rapor Tasarımcısı ifade Düzenleyicisi çağırabilirsiniz. Aşağıdaki örnekte, kullanıcı Birleşik giriş kutusunda ilk öğe seçtiğinde ifade Düzenleyicisi çağrılır:

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

Tasarımcısı fiiller kullanma

Bir menü komutu için bir olay işleyicisi bağlı tasarımcı bir fiildir. Özel rapor madde Çalışma Zamanı Denetimi tasarım ortamında kullanıldığında bir bileşenin kısayol menüsünde görünecektir Tasarımcısı fiiller ekleyebilirsiniz. Kullanarak, çalışma zamanı bileşeni kullanılabilir tasarımcı fiillerin listesini dönebilirsiniz Verbsözellik.

Aşağıdaki kod örneği, tasarımcı fiil ve eklenmesini olay işleyicisi gösterir DesignerVerbCollection, yanı sıra olay işleyicisini kod:

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

Adornments kullanma

Özel rapor madde sınıfları uygulamak da bir Microsoft.ReportDesigner.Design.Adornmentsınıf Bir süsleme ana dikdörtgen Tasarım yüzeyi dışındaki alanlarda sağlamak özel rapor madde denetimin sağlar. Bu alanlarda, kullanıcı arabirimi olaylar, öyle aynı derecede fare tıklamaları ve sürükle ve bırak işlemleri işleyebilir. AdornmentTanımlı sınıfı Reporting Services  Microsoft.ReportDesignerad alanıdır doğrudan uygulanması Adornersınıfı Windows formları bulundu. Tam dokümantasyon için Adornersınıf, bakın Davranış Hizmeti'ne genel bakış MSDN Kitaplığı. Uygulayan örnek kodu için bir Microsoft.ReportDesigner.Design.Adornmentsınıf, bakın SQL Server Raporlama Hizmetleri ürün örnekleri.

Programlama ve Windows formları kullanma hakkında daha fazla bilgi için Visual Studio, MSDN Kitaplığı'nda aşağıdaki konulara bakın:

  • Tasarım Zamanı öznitelikleri bileşenleri

  • BileşenleriVisual Studio

  • İzlenecek yol: Windows Forms denetimi bu Takes Advantage of Visual Studio tasarım zamanı özellikleri oluşturma

Ayrıca bkz.

Görevler

Nasıl yapılır: bir özel rapor madde dağıtmak

Kavramlar

Özel rapor madde mimarisi

Özel rapor madde çalışma zamanı bileşeni oluşturma

Özel rapor madde sınıf kitaplıkları