次の方法で共有


カスタム レポート アイテムのデザイン時コンポーネントの作成

カスタム レポート アイテムのデザイン時コンポーネントは、Visual Studio レポート デザイナー環境で使用できるコントロールです。 カスタム レポート アイテムのデザイン時コンポーネントは、ドラッグ アンド ドロップ操作を使用できるアクティブ化されたデザイン画面、Visual Studio プロパティ ブラウザーとの統合、およびカスタム プロパティ エディター機能を提供します。

カスタム レポート アイテムのデザイン時コンポーネントを使用すると、ユーザーは、デザイン環境のレポート上にカスタム レポート アイテムを配置し、カスタム レポート アイテムのカスタム データ プロパティを設定してから、カスタム レポート アイテムをレポート プロジェクトの一部として保存できます。

開発環境でデザイン時コンポーネントを使用して設定されたプロパティは、ホスト デザイン環境によってシリアル化および逆シリアル化されます。 プロパティは、レポート定義言語 (RDL) ファイルの要素として格納されます。 レポート プロセッサがレポートを実行すると、デザイン時コンポーネントを使用して設定されたプロパティがレポート プロセッサによってカスタム レポート アイテムランタイム コンポーネントに渡され、カスタム レポート アイテムがレンダリングされ、レポート プロセッサに渡されます。

Note

カスタム レポート アイテムのデザイン時コンポーネントは、Microsoft .NET Framework コンポーネントとして実装されます。 ここでは、カスタム レポート アイテムのデザイン時コンポーネントに固有の実装詳細について説明します。

完全に実装されたカスタム レポート アイテムの例については、「SQL Server Reporting Services Product Samples」 (SQL Server Reporting Services の製品サンプル) を参照してください。

デザイン時コンポーネントを実装する

カスタム レポート アイテムのデザイン時コンポーネントのメイン クラスは、Microsoft.ReportDesigner.CustomReportItemDesigner クラスから継承されます。 コンポーネント クラスには、.NET Framework コントロールで使用される標準の属性に加えて、CustomReportItem 属性を定義してください。 この属性は、reportserver.config ファイルに定義されたカスタム レポート アイテム名と同じにする必要があります。 .NET Framework 属性の一覧については、.NET Framework SDK ドキュメントの「属性」を参照してください。

次のコード例では、カスタム レポート アイテムのデザイン時コントロールに属性が適用されています。

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

コンポーネントを初期化する

カスタム レポート アイテム用にユーザーが指定したプロパティは、CustomData クラスを使用して渡されます。 コンポーネントの CustomData クラスから新しいインスタンスを作成して既定値に設定するには、CustomReportItemDesigner クラスの実装で InitializeNewComponent メソッドをオーバーライドしてください。

次のコード例は、コンポーネントの CustomData クラスを初期化する際に、カスタム レポート アイテムのデザイン時コンポーネント クラスで CustomReportItemDesigner.InitializeNewComponent メソッドをオーバーライドする例を示しています。

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

コンポーネントのプロパティを変更する

CustomData プロパティをデザイン環境で変更するには、複数の方法があります。 デザイン時コンポーネントによって公開され、BrowsableAttribute 属性でマークされたあらゆるプロパティは、Visual Studio プロパティ ブラウザーを使用して変更できます。 また、プロパティを変更するには、カスタム レポート アイテムのデザイン画面にアイテムをドラッグする方法や、デザイン環境でコントロールを右クリックし、ショートカット メニューの [プロパティ] をクリックしてカスタム プロパティ ウィンドウを表示する方法もあります。

次のコード例は、BrowsableAttribute 属性が適用された Microsoft.ReportDesigner.CustomReportItemDesigner.CustomData プロパティを示しています。

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

デザイン時コンポーネントに、カスタム プロパティ エディター ダイアログ ボックスを挿入できます。 カスタム プロパティ エディターの実装では、ComponentEditor クラスを継承し、プロパティ編集用ダイアログ ボックスのインスタンスを作成する必要があります。

次の例は、ComponentEditor を継承し、カスタム プロパティ エディター ダイアログ ボックスを表示するクラスの実装です。

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

カスタム プロパティ エディター ダイアログ ボックスで、レポート デザイナーの式エディターを呼び出すことができます。 次の例では、コンボ ボックスの最初の要素をユーザーが選択すると、式エディターが呼び出されます。

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

デザイナー動詞を使用する

デザイナー動詞は、イベント ハンドラーにリンクされたメニュー コマンドです。 カスタム レポート アイテムのランタイム コントロールがデザイン環境で使用されている場合に、コンポーネントのショートカット メニューに表示されるデザイナー動詞を追加できます。 実行時コンポーネントで Verbs プロパティを使用すると、使用可能なデザイナー動詞の一覧を返すことができます。

次のコード例は、デザイナー動詞とイベント ハンドラーを追加するを示しています。DesignerVerbCollection この例では、イベント ハンドラーコードも示しています。

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

装飾を使用する

カスタム レポート アイテムのクラスでは、Microsoft.ReportDesigner.Design.Adornment クラスを実装することもできます。 装飾を使用すると、カスタム レポート アイテムのコントロールで、デザイン画面のメインの四角形の外に領域を作成できます。 これらの領域では、マウス クリックやドラッグ アンド ドロップ操作などのユーザー インターフェイス イベントを扱うことができます。 Reporting Services Microsoft.ReportDesigner 名前空間に定義された Adornment クラスは、Windows フォームで使用される Adorner クラスのパススルー実装です。 Adorner クラスの完全なドキュメントについては、MSDN ライブラリの「動作サービスの概要」を参照してください。 Microsoft.ReportDesigner.Design.Adornment クラスを実装したサンプル コードについては、「SQL Server Reporting Services Product Samples」 (SQL Server Reporting Services の製品サンプル) を参照してください。

Visual Studio でのWindows フォームのプログラミングと使用の詳細については、MSDN ライブラリの以下の記事を参照してください。

  • コンポーネントのデザイン時属性

  • Visual Studio のコンポーネント

  • チュートリアル : Visual Studio のデザイン時機能を活用した Windows フォーム コントロールの作成

カスタム レポート アイテムのアーキテクチャ
カスタム レポート アイテムの実行時コンポーネントの作成
カスタム レポート アイテム クラス ライブラリ
方法: カスタム レポート アイテムを展開する