階層ビュー シートの作成

データテーブルにリレーションシップを作成する

たとえば、ADO.Net API を使用してデータベーステーブルからデータを抽出する場合、階層ビュー シートを作成するには、まず、いくつかのテーブルに基づいて DataSet オブジェクトを設計し、それらの間に関係を作成する必要があります。

VS.NET の DataSet Designer を使用して、関係を作成します。この例では、Customers、Orders、Order Details の 3 つの DataTable があります。シートでは、デフォルトですべての顧客情報が表示されます。ユーザーが顧客を展開すると、

グリッドがその顧客が行ったすべての注文を表示します。ユーザーが注文を展開すると、グリッドがその注文の詳細を表示します。データは階層的です。

注文の詳細は注文の下にリストされ、注文は顧客の下にリストされます。

このためには、データテーブル間に次のリレーションシップを確立する必要があります。

  1. DataTable Orders に外部キーを作成し、キー フィールドは CustomerID です。

  2. DataTable Order Details に外部キーを作成し、キー フィールドは OrderID です。

todo:image_alt_text

  1. DataTableのOrder Detailsに外部キーを作成します。キーのフィールドはOrderIDです。

todo:image_alt_text

データセット デザイナーは次のようになります。

todo:image_alt_text

ワークシートにバインド

Worksheets Designer を使用して、ワークシートの DataSource と DataMember を設定し、データフィールドのバインディング列を構成します。

各行に自動的に + アイコンが追加されます。このアイコンは、バインドオブジェクト(通常は DataRowView オブジェクト)に対応するレコードごとに表示されます。+ アイコンをクリックすると、レコードが展開されて子ビューが表示されます。以下の例では、Worksheets Designer を使用してバインドします。

子ビュー。+アイコンをクリックすると、レコードが展開して子ビューが表示されます。以下の例では、Worksheets Designerを使用して

ルート親 DataTable Customers へのワークシート。

todo:image_alt_text

子テーブルのバインド列をカスタマイズする

コントロールは、開発者が子テーブルのバインド列をカスタマイズするために使用する GridWeb.BindingChildView という名前のイベントを提供します。この例

は、通貨形式で注文詳細の UnitPrice フィールドを表示する必要があります。バインド列の数値形式を変更するためのイベントハンドラを追加します。

C#

 // Handles the BindingChildView event to set the UnitPrice column.

private void GridWeb1_BindingChildView(Aspose.Cells.GridWeb.GridWeb childGrid, Aspose.Cells.GridWeb.Data.WebWorksheet childSheet)

{

    DataView view = (DataView)childSheet.DataSource;

    if (view.Table.TableName == "Order Details")

    {

        childSheet.BindColumns["UnitPrice"].NumberType = NumberType.Currency3;

    }

}

ワークシートで GridDesktop データ バインディング機能を実装する

 'Handles the BindingChildView event to set the UnitPrice column.

Private Sub GridWeb1_BindingChildView(ByVal childGrid As Aspose.Cells.GridWeb.GridWeb, ByVal childSheet As 

Aspose.Cells.GridWeb.Data.WebWorksheet) Handles GridWeb1.BindingChildView

    Dim view As DataView = CType(childSheet.DataSource, DataView)

    If view.Table.TableName = "Order Details" Then

        childSheet.BindColumns("UnitPrice").NumberType = NumberType.Currency3

    End If

End Sub

データベースからデータを読み込み、バインドする

Aspose.Cells.GridWeb のワークシートデザイナーを使用してデータセットにワークシートをバインドする の記載にあるように、 次の手順でデータをデータベースからデータセットにロードし、データセットをシートにバインドするには、Page_Load ブロックにコードを追加する必要があります。

次のステップ。

Asppose.Grid.Web.Data.WebWorksheet クラスには、いくつかの便利なプロパティがあります。

たとえば、プロパティ EnableCreateBindColumnHeader は、シート内のバインド列の見出しを作成するために使用されます。また、列

ヘッダーは、バインドされた列の名前を表示します。値には true または false を取ります。

プロパティ BindStartRow および BindStartColumn は、ソースの GridWeb コントロールのシート内の位置を指定します。 プロパティ EnableExpandChildView は、ワークシートの拡張子を無効にするために使用されます。デフォルトでは true に設定されています。

このクラスには、いくつかの便利なメソッドもあります。

  • DataBind() メソッドは、ソースとシートをバインドします。
  • CreateNewBindRow() は、新しい行を追加してそれをデータソースにバインドします。
  • DeleteBindRow() は、バインドされた行を削除します。
  • SetRowExpand() メソッドは、展開された行を設定し、データバインディングモードで子ビューコンテンツを表示します。
  • GetRowExpand() メソッドは、行が展開されているかどうかを示すブール値を取得します。

以下のコードでは、DataSet オブジェクト “dataSet21” に、3 つのテーブルに基づくデータが入力されます。顧客テーブルはフィルタリングされ、階層的な表示の最初のテーブルとなります。“sheet” という名前の WebWorksheet オブジェクトが作成され、まずシートをクリアし、次に

データ ソースにリンクされます。

VB.NET

C#

 private void Page_Load(object sender, System.EventArgs e)

{

    // Put user code to initialize the page here

    if (!IsPostBack)

    {

        BindWithoutInSheetHeaders();

    }

}

private void BindWithoutInSheetHeaders()

{

    DemoDatabase2 db = new DemoDatabase2();

    string path = MapPath(".");

    path = path.Substring(0, path.LastIndexOf("\\"));

    path = path.Substring(0, path.LastIndexOf("\\"));

    db.oleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + "\\Database\\Northwind.mdb";

    try

    {

        // Connects to database and fetches data.

        // Customers Table.

        db.oleDbDataAdapter1.Fill(dataSet21);

        // Orders Table.

        db.oleDbDataAdapter2.Fill(dataSet21);

        // OrderDetailTable.

        db.oleDbDataAdapter3.Fill(dataSet21);

        // Filter data

        dataSet21.Customers.DefaultView.RowFilter = "CustomerID<'BSAAA'";

        WebWorksheet sheet = GridWeb1.WorkSheets[0];

        // Clears the sheet.

        sheet.Cells.Clear();

        // Disables creating in-sheet headers.

        sheet.EnableCreateBindColumnHeader = false;

        // Data cells begin from row 0.

        sheet.BindStartRow = 0;

        // Bind the sheet to the dataset.

        sheet.DataBind();

    }

    finally

    {

        db.oleDbConnection1.Close();

    }

}

ワークシートで GridDesktop データ バインディング機能を実装する

 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    'Put user code to initialize the page here

    If Not IsPostBack Then

        BindWithoutInSheetHeaders()

    End If

End Sub

Private Sub BindWithoutInSheetHeaders()

    Dim db As DemoDatabase2 = New DemoDatabase2()

    Dim path As String = MapPath(".")

    path = path.Substring(0, path.LastIndexOf("\"))

    path = path.Substring(0, path.LastIndexOf("\"))

    db.OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + "\Database\Northwind.mdb"

    Try

        ' Connects to database and fetches data.

        ' Customers Table.

        db.OleDbDataAdapter1.Fill(DataSet21)

        ' Orders Table.

        db.OleDbDataAdapter2.Fill(DataSet21)

        ' OrderDetailTable.

        db.OleDbDataAdapter3.Fill(DataSet21)

        ' Filter data

        DataSet21.Customers.DefaultView.RowFilter = "CustomerID<'BSAAA'"

        Dim sheet As WebWorksheet = GridWeb1.WorkSheets(0)

        ' Clears the sheet.

        sheet.Cells.Clear()

        ' Disables creating in-sheet headers.

        sheet.EnableCreateBindColumnHeader = False

        ' Data cells begin from row 0.

        sheet.BindStartRow = 0

        ' Bind the sheet to the dataset.

        sheet.DataBind()

    Finally

        db.OleDbConnection1.Close()

    End Try

End Sub