概述

数据源是一个抽象接口,用于定义数据流的来源。

数据源可以实现为物理数组、应用程序中的自定义类,甚至可以是 ReoGrid 工作表本身。

通过实现数据源接口,您可以灵活地配置数据流,并以多种方式向工作表提供数据。

您还可以对数据源应用筛选器,在将数据传递到下一个输入之前对其进行处理。使用数据源可以灵活地管理大型报表系统。

接口定义

数据源通过 IDataSource 接口定义。 它作为向工作表提供数据的抽象接口,对数据的具体类型或种类没有限制。

数据源提供 IDataRecordEnumerator 接口,并充当包含多行记录的集合。IDataRecord 表示单行数据。

public interface IDataSource<out T> : IEnumerable<T> where T : IDataRecord
{
  event EventHandler<DataSourceChangedEventArgs> OnInputDataChanged;
}

数据源变更时的同步

通过实现 OnInputDataChanged 事件,您可以在数据变更时通知下游输入,使变更实时反映在工作表中。

在工作表上设置数据源

您可以使用 Worksheet.AddDataSource 方法将数据源添加到工作表。

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

ReoGrid 支持在单个工作表上添加多个数据源。

实现自定义数据源

通过实现 IDataSource 接口,您可以定义自己的自定义数据源。

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

通过这种方式实现 IDataSource,您可以定义适合应用程序独特数据结构或检索方法的数据源。例如,您可以构建一种机制,将从数据库、Web API 或其他外部系统检索的数据直接反映到工作表中。

作为实现示例,您可以创建一个实现 IDataRecordMyDataRecord 类,并持有必要的数据字段,从而支持任何数据结构。

public class MyDataRecord : IDataRecord
{
  public object[] Values { get; }

  public MyDataRecord(params object[] values)
  {
    Values = values;
  }

  public object GetData(int columnIndex) => Values[columnIndex];
}

这使您能够以灵活且可扩展的方式在 ReoGrid 中配置数据显示和更新处理。

ReoGrid 内置数据源

ReoGrid 目前提供以下两种内置数据源:

  • 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;
  // Currency
  record["tsuka"] = "USD";
  // Subject
  record["kamoku"] = "015";
  // Trade type
  record["baibai"] = "Sell";
  // Total amount
  record["zengaku"] = 105800;
  // Date
  record["hiduke"] = new DateTime(2020, 11, 1);
  // Remarks
  record["biko"] = "...";
}

// 将数据源添加到工作表;A1:G30 为目标范围地址
sheet.AddDataSource("A1:G30", ds);
这篇文章对您有帮助吗?