データソース

概要

データソースはデータの流れの元を定義する抽象的インターフェイスです。

データソースの実現は、物理的な配列、アプリケーションでのカスタマイズのクラス、またはReoGridワークシートとなることができます。

データソースのインターフェイスを実現することによって、データの流れを柔軟に組み立てることができ、あらゆる形でワークシートにインプットすることが可能になります。

また、データソースにフィルターをかけることもでき、データを加工して次のインプットに渡すこともできます。データソースを活用すると大規模の帳票システムにより対応しやすくなります。

インターフェイス定義

データソースは IDataSource インターフェイスを介して定義しています。 データソースはワークシートにインプットするデータの入力元としての抽象的なインターフェイスであるため、データの具体的な種類や型などについてのインターフェイスはありません。

データソースは IDataRecordEnumerator インターフェイスを提供し、複数行レコードを提供するコレクションに相当します。IDataRecord は一行のデータを表します。

public interface IDataSource<out T> : IEnumerable<T> where T : IDataRecord
{
  // TODO: add event arguments to determine which data is changed
  event EventHandler OnInputDataChanged;
}

データソース変更時の連動

OnInputDataChanged イベントの実装によって、入力データに変更があった場合、次のインプットに知らせることができ、データはリアルタイムでワークシートに反映できます。

ワークシートにデータソースを設定

Worksheet.AddDataSource メソッドを利用してデータソースをワークシートに追加することができます。

sheet.AddDataSource("A1:G30", dataSource);

ReoGrid は複数のデータソース追加に対応しています。

データソースの実現

IDataSource インターフェイスを実現することによってカスタマイズのデータソースを作成することができます。

public class MyDataSource : IDataSource<IDataRecord>
{
  private object[,] data;
  ...
}

ReoGrid の内蔵データソース

現時点では ReoGrid は以下の1つのデータソースを内蔵し提供しています。

  • ArrayDataSource - 通常の object[,] 形式でデータを格納することができます。
  • 列ベースデータソース - 列のインデックスの代わりに列毎のIDでデータを扱うことができます。

列ベースデータソース NRI

列ベースデータソースは列を定義し、列のIDを指定してデータを定義することができます。列ベースデータソースは ColumnBasedDataSource クラスを利用します。

// データソースを作成
var ds = new ColumnBasedDataSource();

// 列を定義
ds.Columns.AddRange("id", "tsuka", "kamoku", "baibai", "zengaku", "hiduke", "biko");

// データを格納
for (int r = 0; r < 30; r++)
{
  var record = ds.Records.AppendNew();

  // ID
  record["id"] = 15001;
  // 通貨
  record["tsuka"] = "USD";
  // 科目
  record["kamoku"] = "015";
  // 売買
  record["baibai"] = "売";
  // 全額
  record["zengaku"] = 105800;
  // 日付
  record["hiduke"] = new DateTime(2020, 11, 1);
  // 備考
  record["biko"] = "...";
}

// データソースをワークシートに追加、 A1:G30 は格納先の範囲アドレス
sheet.AddDataSource("A1:G30", ds);