| PowerTools ActiveReports for .NET 11.0J > ActiveReportsユーザーガイド > サンプルとチュートリアル > チュートリアル > ページレポート/RDLレポートのチュートリアル > カスタマイズ > カスタムデータプロバイダ |
ページレポート/RDLレポートでは、カスタムデータプロバイダを使用し、実行時と設計時に正規以外のデータソースを使用することができます。このチュートリアルでは、カスタムデータプロバイダを使用したプロジェクトのソリューションを作成し、CSVファイルからデータを取得する方法を紹介します。
このトピックでは、以下のタスクを行います。
このチュートリアルを完了すると、CSVファイルから取得したデータを読み込んだレポートがデザイナ上に表示されます。
カスタムデータプロバイダのためのデザイナプロジェクトを作成する
| テキスト(RichTextBoxのTextプロパティに貼り付けます) |
コードのコピー
|
|---|---|
1.レポートエクスプローラでは、データソースノードを右クリックし、[データソースの追加]を選択します。 2.[レポートデータソース]ダイアログでは、全般のページに2つの種類ボックスをドロップダウンし、CSV Data Providerを選択してOKをクリックします。 3.レポートエクスプローラで、DataSource1を右クリックし、[データセットの追加]を選択します。 4.表示されるダイアログでは、クエリのページを選択します。 5.クエリボックスをドロップダウンし、カスタムクエリエディタを表示します。 6.CSVファイルの選択ボタンをクリックし、このプロジェクトにCategories.csvファイルを開きます。 7.OKをクリックして設定を保存し、ダイアログを閉じます。 8.プレビューをクリックし、CSVから取得したデータのレポートを表示します。 |
|
Visual Basic
| Visual Basicコード(クラスの上貼り付けます) |
コードのコピー
|
|---|---|
Imports System.Xml Imports System.IO Imports GrapeCity.ActiveReports.Design |
|
C#
| C#コード(クラスの上貼り付けます) |
コードのコピー
|
|---|---|
using System.Xml; using System.IO; using GrapeCity.ActiveReports.Design; |
|
Visual Basic
| Visual Basicコード(Form_Loadイベント内に貼り付けます) |
コードのコピー
|
|---|---|
Using reportStream = File.OpenRead("DemoReport.rdlx")
Using reader = XmlReader.Create(reportStream)
Designer1.LoadReport(reader, DesignerReportType.Page)
End Using
End Using
|
|
C#
| C#コード(Form_Loadイベント内に貼り付けます) |
コードのコピー
|
|---|---|
using (var reportStream = File.OpenRead("DemoReport.rdlx"))
{
using (var reader = XmlReader.Create(reportStream))
{
designer1.LoadReport(reader, DesignerReportType.Page);
}
}
|
|
カスタムデータプロバイダを使用するためのプロジェクトを作成する
| Configファイルに貼り付けます |
コードのコピー
|
|---|---|
<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<Extensions>
<Data>
<Extension Name="CSV" DisplayName="CSV Data Provider"
Type="CustomDataProvider.CsvDataProvider.CsvDataProviderFactory,
CustomDataProvider"
CommandTextEditorType="CustomDataProvider.CSVDataProvider.QueryEditor,
CustomDataProvider"/>
</Data>
</Extensions>
</Configuration>
|
|
| テキストファイルに貼り付けます |
コードのコピー
|
|---|---|
EmployeeID(int32),LastName,FirstName,Role,City 1,James,Yolanda,Owner,Columbus 7,Reed,Marvin,Manager,Newton 9,Figg,Murray,Cashier,Columbus 12,Snead,Lance,Store Keeper,Columbus 15,Halm,Jeffry,Store Keeper,Columbus 17,Hames,Alma,Store Keeper,Oak Bay 18,Nicki,Aubrey,Store Keeper,Columbus 24,Cliett,Vikki,Store Keeper,Newton |
|
データを表示するためのレポートを追加する
![]() |
メモ: ページレポートを使用する場合には、1つのページにすべてのデータを表示するためにFixedSizeプロパティを設定する必要があります。 |
| テキストボックス名 | 値 | 背景色 |
|---|---|---|
| TextBox1 | 名前 | MediumSlateBlue |
| TextBox2 | 地位 | MediumSlateBlue |
| TextBox3 | 都市 | MediumSlateBlue |
| TextBox4 | =Fields!FirstName.Value & " " & Fields!LastName.Value | |
| TextBox5 | =Fields!Role.Value | |
| TextBox6 | =Fields!City.Value |
カスタムデータプロバイダを格納するためのクラスライブラリプロジェクトを追加する
Visual Basic
| Visual Basic コード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
Namespace CSVDataProvider
'データソース内のフィールドに関する情報を表します。
Friend Structure CsvColumn
Private ReadOnly _fieldName As String
Private ReadOnly _dataType As Type
' CsvColumnクラスの新しいインスタンスを生成します。
' fieldNameはCsvColumnのインスタンスによって表されるフィールドの名前です。
' dataTypeはCsvColumnのインスタンスによって表されるフィールドの種類です。
Public Sub New(fieldName As String, dataType As Type)
If fieldName Is Nothing Then
Throw New ArgumentNullException("fieldName")
End If
If dataType Is Nothing Then
Throw New ArgumentNullException("dataType")
End If
_fieldName = fieldName
_dataType = dataType
End Sub
' CsvColumnのインスタンスによって表されるフィールドの名前を取得します。
Public ReadOnly Property FieldName() As String
Get
Return _fieldName
End Get
End Property
' CsvColumnのインスタンスによって表されるフィールドの種類を取得します。
Public ReadOnly Property DataType() As Type
Get
Return _dataType
End Get
End Property
' CsvColumnのインスタンスを表わす文字列を返します。
Public Overrides Function ToString() As String
Return [String].Concat(New String() {FieldName, "(", DataType.ToString(), ")"})
End Function
' 2つのCsvColumnのインスタンスが同じかどうかを判定します。
' 指定されたCsvColumnが現在のCsvColumnと同じである場合はTrueを返し、そうではない場合はFalseを返します。
Public Overrides Function Equals(obj As Object) As Boolean
Dim flag As Boolean
If TypeOf obj Is CsvColumn Then
flag = Equals(CType(obj, CsvColumn))
Else
flag = False
End If
Return flag
End Function
Private Overloads Function Equals(column As CsvColumn) As Boolean
Return column.FieldName = FieldName
End Function
' ハッシュテーブルのようなハッシュアルゴリズムやデータ構造での使用に適した、CsvColumnのハッシュ関数として機能します。
' 現在のCsvColumnインスタンスにハッシュコードを返します。
Public Overrides Function GetHashCode() As Integer
Return (FieldName.GetHashCode() + DataType.GetHashCode())
End Function
End Structure
End Namespace
|
|
C#
| C#コード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
using System;
namespace CustomDataProvider.CSVDataProvider
{
// データソース内のフィールドに関する情報を表します。
internal struct CsvColumn
{
private readonly string _fieldName;
private readonly Type _dataType;
// CsvColumnクラスの新しいインスタンスを生成します。
// fieldNameはCsvColumnのインスタンスによって表されるフィールドの名前です。
// dataTypeはCsvColumnのインスタンスによって表されるフィールドの種類です。
public CsvColumn(string fieldName, Type dataType)
{
if (fieldName == null)
throw new ArgumentNullException("fieldName");
if (dataType == null)
throw new ArgumentNullException("dataType");
_fieldName = fieldName;
_dataType = dataType;
}
// CsvColumnのインスタンスによって表されるフィールドの名前を取得します。
public string FieldName
{
get { return _fieldName; }
}
//CsvColumnのインスタンスによって表されるフィールドの種類を取得します。
public Type DataType
{
get { return _dataType; }
}
//CsvColumnのインスタンスを表わす文字列を返します。
public override string ToString()
{
return String.Concat(new string[] {FieldName, "(", DataType.ToString(), ")"});
}
//2つのCsvColumnのインスタンスが同じかどうかを判定します。
//指定されたCsvColumnが現在のCsvColumnと同じである場合はTrueを返し、そうではない場合はFalseを返します。
public override bool Equals(object obj)
{
bool flag;
if (obj is CsvColumn)
{
flag = Equals((CsvColumn) obj);
}
else
{
flag = false;
}
return flag;
}
private bool Equals(CsvColumn column)
{
return column.FieldName == FieldName;
}
//ハッシュテーブルのようなハッシュアルゴリズムやデータ構造での使用に適した、CsvColumnのハッシュ関数として機能します。
//現在のCsvColumnインスタンスにハッシュコードを返します。
public override int GetHashCode()
{
return (FieldName.GetHashCode() + DataType.GetHashCode());
}
}
}
|
|
Visual Basic
| Visual Basicコード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
Imports System
Imports System.Collections
Imports System.Globalization
Imports System.IO
Imports System.Text.RegularExpressions
Imports GrapeCity.ActiveReports.Extensibility.Data
Namespace CSVDataProvider
' .NET Framework CSV Data ProviderのIDataReaderの実施を提供します。
Friend Class CsvDataReader
Implements IDataReader
' メモ:HashcodeProviderとComparerは大文字と小文字を区別します。
Private _typeLookup As New Hashtable(StringComparer.Create(CultureInfo.InvariantCulture, False))
Private _columnLookup As New Hashtable()
Private _columns As Object()
Private _textReader As TextReader
Private _currentRow As Object()
' 正規表現は、高速化するためにコンパイル済みです。
|
|
C#
| C#コード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
using System;
using System.Collections;
using System.Globalization;
using System.IO;
using System.Text.RegularExpressions;
using GrapeCity.ActiveReports.Extensibility.Data;
namespace CustomDataProvider.CSVDataProvider
{
// .NET Framework CSV Data ProviderのIDataReaderの実施を提供します。
internal class CsvDataReader :IDataReader
{
//メモ:HashcodeProviderとComparerは大文字と小文字を区別します。
private Hashtable _typeLookup =
new Hashtable(StringComparer.Create(CultureInfo.InvariantCulture, false));
private Hashtable _columnLookup = new Hashtable();
private object[] _columns;
private TextReader _textReader;
private object[] _currentRow;
//正規表現は、高速化するためにコンパイル済みです。
|
|
Visual Basic
| Visual Basicコード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
Imports System
Imports System.IO
Imports GrapeCity.ActiveReports.Extensibility.Data
Namespace CSVDataProvider
' .NET Framework CSV Data ProviderのIDbDataReaderの実施を提供します。
Public NotInheritable Class CsvCommand
Implements IDbCommand
Private _commandText As String
Private _connection As IDbConnection
Private _commandTimeout As Integer
Private _commandType As CommandType
' CsvCommandクラスの新しいインスタンスを生成します。
Public Sub New()
Me.New(String.Empty)
End Sub
' コマンドテキストのあるCsvCommandクラスの新しいインスタンスを生成します。
' commandTextパラメータはコマンドテキストを表します。
Public Sub New(commandText As String)
Me.New(commandText, Nothing)
End Sub
' コマンドテキストとCsvConnectionがあるCsvCommandクラスの新しいインスタンスを生成します。
' commandTextパラメータは、コマンドテキストを表します。
' connectionパラメータは、データソースとCsvConnectionを表します。
Public Sub New(commandText As String, connection As CsvConnection)
_commandText = commandText
_connection = connection
End Sub
' データソースで実行するコマンドを取得、設定します。
Public Property CommandText() As String Implements IDbCommand.CommandText
Get
Return _commandText
End Get
Set(value As String)
_commandText = value
End Set
End Property
' コマンド実行の試行を終了し、エラーを生成するまでの待機時間を取得、設定します。
Public Property CommandTimeout() As Integer Implements IDbCommand.CommandTimeout
Get
Return _commandTimeout
End Get
Set(value As Integer)
_commandTimeout = value
End Set
End Property
' CommandTextプロパティの解放を指示する値を取得、設定します。
Public Property CommandType() As CommandType Implements IDbCommand.CommandType
Get
Return _commandType
End Get
Set(value As CommandType)
_commandType = value
End Set
End Property
' CsvCommandのインスタンスに使用するCsvConnectionの値を取得、設定します。
Public Property Connection() As IDbConnection
Get
Return _connection
End Get
Set(value As IDbConnection)
_connection = value
End Set
End Property
' CommandTextをCsvConnectionに送信し、いずれかのCommandBehavior値を使用し、CsvDataReaderをビルドします。
' behaviorパラメータはCommandBehaviorの値を表します。
' CsvDataReaderオブジェクトを返却。
Public Function ExecuteReader(behavior As CommandBehavior) As IDataReader Implements IDbCommand.ExecuteReader
Return New CsvDataReader(New StreamReader(_commandText))
End Function
' 定数に拡張パラメータを指定したコマンドテキストを表わす文字列を返却します。
Public Function GenerateRewrittenCommandText() As String Implements IDbCommand.GenerateRewrittenCommandText
Return _commandText
End Function
' CommandTextをCsvConnectionに送信し、CsvDataReaderをビルドします。
' CsvDataReaderオブジェクトを返します。
Public Function ExecuteReader() As IDataReader Implements IDbCommand.ExecuteReader
Return ExecuteReader(CommandBehavior.SchemaOnly)
End Function
#Region "Non implemented IDbCommand Members"
Public ReadOnly Property Parameters() As IDataParameterCollection Implements IDbCommand.Parameters
Get
Throw New NotImplementedException()
End Get
End Property
Public Property Transaction() As IDbTransaction Implements IDbCommand.Transaction
Get
Throw New NotImplementedException()
End Get
Set(value As IDbTransaction)
Throw New NotImplementedException()
End Set
End Property
Public Sub Cancel() Implements IDbCommand.Cancel
End Sub
Public Function CreateParameter() As IDataParameter Implements IDbCommand.CreateParameter
Throw New NotImplementedException()
End Function
#End Region
#Region "IDisposable Members"
' CsvCommandに使用するリソースを放出します。
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Private Sub Dispose(disposing As Boolean)
If disposing Then
If _connection IsNot Nothing Then
_connection.Dispose()
_connection = Nothing
End If
End If
End Sub
#End Region
End Class
End Namespace
|
|
C#
| C# コード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
using System;
using System.IO;
using GrapeCity.ActiveReports.Extensibility.Data;
namespace CustomDataProvider.CSVDataProvider
{
// .NET Framework CSV Data ProviderのIDbCommandの実施を提供します。
public sealed class CsvCommand :IDbCommand
{
private string _commandText;
private IDbConnection _connection;
private int _commandTimeout;
private CommandType _commandType;
/// Creates a new instance of the CsvCommand class.
public CsvCommand()
: this(string.Empty)
{
}
// コマンドテキストのあるCsvCommandクラスの新しいインスタンスを生成します。
// commandTextパラメータはコマンドテキストを表します。
public CsvCommand(string commandText)
: this(commandText, null)
{
}
// コマンドテキストとCsvConnectionがあるCsvCommandクラスの新しいインスタンスを生成します。
// commandTextパラメータ、コマンドテキストを表します。
// connectionパラメータは、データソースとCsvConnectionを表します。
public CsvCommand(string commandText, CsvConnection connection)
{
_commandText = commandText;
_connection = connection;
}
// データソースで実行するコマンドを取得、設定します。
public string CommandText
{
get { return _commandText; }
set { _commandText = value; }
}
// コマンド実行の試行を終了し、エラーを生成するまでの待機時間を取得、設定します。
public int CommandTimeout
{
get { return _commandTimeout; }
set { _commandTimeout = value; }
}
// CommandTextプロパティの解放を指示する値を取得、設定します。
public CommandType CommandType
{
get { return _commandType; }
set { _commandType = value; }
}
// CsvCommandのインスタンスに使用するCsvConnectionの値を取得、設定します。
public IDbConnection Connection
{
get { return _connection; }
set { _connection = value; }
}
// CommandTextをCsvConnectionに送信し、いずれかのCommandBehavior値を使用し、CsvDataReaderをビルドします。
// behaviorパラメータはCommandBehaviorの値を表します。
// CsvDataReaderオブジェクトを返却。
public IDataReader ExecuteReader(CommandBehavior behavior)
{
return new CsvDataReader(new StreamReader(_commandText));
}
// 定数に拡張パラメータを指定したコマンドテキストを表わす文字列を返却します。
public string GenerateRewrittenCommandText()
{
return _commandText;
}
// CommandTextをCsvConnectionに送信し、CsvDataReaderをビルドします。
// CsvDataReaderオブジェクトを返します。
public IDataReader ExecuteReader()
{
return ExecuteReader(CommandBehavior.SchemaOnly);
}
#region Non implemented IDbCommand Members
public IDataParameterCollection Parameters
{
get { throw new NotImplementedException(); }
}
public IDbTransaction Transaction
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
public void Cancel()
{
}
public IDataParameter CreateParameter()
{
throw new NotImplementedException();
}
#endregion
#region IDisposable Members
// CsvCommandに使用するリソースを放出します。
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (disposing)
{
if (_connection != null)
{
_connection.Dispose();
_connection = null;
}
}
}
#endregion
}
}
|
|
Visual Basic
| Visual Basicコード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
Imports System
Imports System.Collections.Specialized
Imports GrapeCity.ActiveReports.Extensibility.Data
Namespace CSVDataProvider
' .NET Framework CSV Data ProviderのIDbConnectionの実施を提供します。
Public NotInheritable Class CsvConnection
Implements IDbConnection
Private _localizedName As String
' CsvConnectionクラスの新しいインスタンスを生成します。
Public Sub New()
_localizedName = "Csv"
End Sub
' CsvConnectionクラスの新しいインスタンスを生成します。
' localizedNameはCsvConnectionのインスタンスのローカライズ名を表します。
Public Sub New(localizeName As String)
_localizedName = localizeName
End Sub
#Region "IDbConnection Members"
' データソースに接続の開始に使用する文字列を取得、設定します。
' 備考:Csv Data Providerでは使いません。
Public Property ConnectionString() As String Implements IDbConnection.ConnectionString
Get
Return String.Empty
End Get
Set(value As String)
End Set
End Property
' 接続を確立する際の待機時間を取得、設定します。
' 備考:Csv Data Providerでは使いません。
Public ReadOnly Property ConnectionTimeout() As Integer Implements IDbConnection.ConnectionTimeout
Get
Throw New NotImplementedException()
End Get
End Property
' データソースとのトランザクションを開始します。
' 新しいトランザクションを表わすオブジェクトを返します。
' 備考:Csv Data Providerでは使いません。
Public Function BeginTransaction() As IDbTransaction Implements IDbConnection.BeginTransaction
Return Nothing
End Function
' データソースとの接続を開きます。
' 備考:Csv Data Providerでは使いません。
Public Sub Open() Implements IDbConnection.Open
End Sub
' データソースとの接続を閉じます。これは、接続を閉じるために推奨される方法です。
Public Sub Close() Implements IDbConnection.Close
Dispose()
End Sub
' CsvConnectionに関連付けたCsvCommandオブジェクトを生成し、返却します。
Public Function CreateCommand() As IDbCommand Implements IDbConnection.CreateCommand
Return New CsvCommand(String.Empty)
End Function
Public Property DataProviderService() As IDataProviderService Implements IDbConnection.DataProviderService
Get
Return Nothing
End Get
Set(value As IDataProviderService)
End Set
End Property
#End Region
#Region "IDisposable Members"
' CsvConnectionに使用するリソースを解放します。
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Private Sub Dispose(disposing As Boolean)
End Sub
' オブジェクトがガベージコレクションによってクリアされる前に、そのオブジェクトがリソースを解放し、
' その他のクリーンアップ操作を実行できるようにします。
Protected Overrides Sub Finalize()
Try
Dispose(False)
Finally
MyBase.Finalize()
End Try
End Sub
#End Region
#Region "IExtension Members"
' CsvConnectionのローカライズ名を取得します。
Public ReadOnly Property LocalizedName() As String Implements IDbConnection.LocalizedName
Get
Return _localizedName
End Get
End Property
' この拡張子の構成情報を指定します。
' configurationSettingsは設定のNameValueCollectionを表します。
Public Sub SetConfiguration(configurationSettings As NameValueCollection) Implements IDbConnection.SetConfiguration
End Sub
#End Region
End Class
End Namespace
|
|
C#
| C# コード(デフォルトスタブと置換するには貼り付けます) |
コードのコピー
|
|---|---|
using System;
using System.Collections.Specialized;
using GrapeCity.ActiveReports.Extensibility.Data;
namespace CustomDataProvider.CSVDataProvider
{
// .NET Framework CSV Data ProviderのIDbConnectionの実施を提供します。
public sealed class CsvConnection :IDbConnection
{
private string _localizedName;
// CsvConnectionクラスの新しいインスタンスを生成します。
public CsvConnection()
{
_localizedName = "Csv";
}
// CsvConnectionクラスの新しいインスタンスを生成します。
// ocalizedNameはCsvConnectionのインスタンスのローカライズ名を表します。
public CsvConnection(string localizeName)
{
_localizedName = localizeName;
}
#region IDbConnection Members
// データソースに接続の開始に使用する文字列を取得、設定します。
// 備考:Csv Data Providerでは使いません。
public string ConnectionString
{
get { return string.Empty; }
set { ; }
}
// 接続を確立する際の待機時間を取得、設定します。
// 備考:Csv Data Providerでは使いません。
public int ConnectionTimeout
{
get { throw new NotImplementedException(); }
}
// データソースとのトランザクションを開始します。
// 新しいトランザクションを表わすオブジェクトを返します。
// 備考:Csv Data Providerには使いません。
public IDbTransaction BeginTransaction()
{
return null;
}
// データソースとの接続を開きます。
// 備考:Csv Data Providerには使いません。
public void Open()
{
;
}
// データソースとの接続を閉じます。これは、接続を閉じるために推奨される方法です。
public void Close()
{
Dispose();
}
// CsvConnectionに関連付けたCsvCommandオブジェクトを生成し、返却します。
public IDbCommand CreateCommand()
{
return new CsvCommand(string.Empty);
}
public IDataProviderService DataProviderService
{
get { return null; }
set { }
}
#endregion
#region IDisposable Members
// CsvConnectionに使用するリソースを解放します。
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
}
// オブジェクトがガベージコレクションによってクリアされる前に、そのオブジェクトがリソースを解放し、
// その他のクリーンアップ操作を実行できるようにします。
~CsvConnection()
{
Dispose(false);
}
#endregion
#region IExtension Members
// CsvConnectionのローカライズ名を取得します。
public string LocalizedName
{
get { return _localizedName; }
}
// この拡張子の構成情報を指定します。
// configurationSettingsは設定のNameValueCollectionを表します。
public void SetConfiguration(NameValueCollection configurationSettings)
{
}
#endregion
}
}
|
|
Visual Basic
| Visual Basicコード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
Imports GrapeCity.ActiveReports.Extensibility.Data
Imports GrapeCity.BI.Data.DataProviders
Namespace CSVDataProvider
' .NET Framework CSV Data ProviderのDataProviderFactoryを実施します。
Public Class CsvDataProviderFactory
Inherits DataProviderFactory
' CsvDataProviderFactoryクラスの新しいインスタンスを生成します。
Public Sub New()
End Sub
' CsvCommandの新しいインスタンスを返します。
Public Overrides Function CreateCommand() As IDbCommand
Return New CsvCommand()
End Function
' CsvConnectionの新しいインスタンスを返します。
Public Overrides Function CreateConnection() As IDbConnection
Return New CsvConnection()
End Function
End Class
End Namespace
|
|
C#
| C#コード(クラスのデフォルトスタブと置き換えます) |
コードのコピー
|
|---|---|
using GrapeCity.ActiveReports.Extensibility.Data;
using GrapeCity.BI.Data.DataProviders;
namespace CustomDataProvider.CSVDataProvider
{
// .NET Framework CSV Data ProviderのDataProviderFactoryを実施します。
public class CsvDataProviderFactory :DataProviderFactory
{
// CsvDataProviderFactoryクラスの新しいインスタンスを生成します。
public CsvDataProviderFactory()
{
}
// CsvCommandの新しいインスタンスを返します。
public override IDbCommand CreateCommand()
{
return new CsvCommand();
}
// CsvConnectionの新しいインスタンスを返します。
public override IDbConnection CreateConnection()
{
return new CsvConnection();
}
}
}
|
|
クエリエディタにボタンを追加する
Visual Basic
| Visual Basicコード(クラスのデフォールトスタブと置き換えます) |
コードのコピー
|
|---|---|
Imports System
Imports System.Collections.Generic
Imports System.Drawing.Design
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Windows.Forms
Imports System.Windows.Forms.Design
Namespace CSVDataProvider
Public NotInheritable Class QueryEditor
Inherits UITypeEditor
Dim path = ""
Friend WithEvents btn As New Button()
Public Overrides Function GetEditStyle(context As System.ComponentModel.ITypeDescriptorContext) As UITypeEditorEditStyle
Return UITypeEditorEditStyle.DropDown
End Function
Public Overrides Function EditValue(context As System.ComponentModel.ITypeDescriptorContext, provider As System.IServiceProvider, value As Object) As Object
Dim edSvc As IWindowsFormsEditorService = DirectCast(provider.GetService(GetType(IWindowsFormsEditorService)), IWindowsFormsEditorService)
btn.Text = "Select CSV File..."
Dim pdg = btn.Padding
pdg.Bottom += 2
btn.Padding = pdg
edSvc.DropDownControl(btn)
If String.IsNullOrEmpty(path) Then
Return String.Empty
End If
If Not File.Exists(path) Then
Return String.Empty
End If
Return path
End Function
Private Sub btn_Click(sender As System.Object, e As System.EventArgs) Handles btn.Click
Using openDlg = New OpenFileDialog()
openDlg.Filter = "CSV Files (*.csv)|*.csv|All Files (*.*)|*.*"
If openDlg.ShowDialog() <> DialogResult.OK Then
path = ""
Else
path = openDlg.FileName
End If
End Using
End Sub
End Class
End Namespace
|
|
C#
| C#コード(デフォールトスタブと置換するには貼り付けます) |
コードのコピー
|
|---|---|
using System;
using System.Collections.Generic;
using System.Drawing.Design;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Windows.Forms.Design;
namespace CustomDataProvider.CSVDataProvider
{
public sealed class QueryEditor :UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
var path = "";
var btn = new Button();
btn.Text = "Select CSV File...";
var pdg = btn.Padding;
pdg.Bottom += 2;
btn.Padding = pdg;
btn.Click += delegate
{
using (var openDlg = new OpenFileDialog())
{
openDlg.Filter = "CSV Files (*.csv)|*.csv|All Files (*.*)|*.*";
if (openDlg.ShowDialog() != DialogResult.OK)
path = "";
else
path = openDlg.FileName;
}
};
edSvc.DropDownControl(btn);
if (string.IsNullOrEmpty(path)) return string.Empty;
if (!File.Exists(path)) return string.Empty;
return path;
}
}
}
|
|