Créer une vue hiérarchique de la feuille

Créer des relations pour les DataTables

Par exemple, vous utilisez l’API ADO.Net et extrayez des données des tables de la base de données. Pour créer une feuille de vue hiérarchique, vous devez concevoir un DataSet

objet basé sur certaines tables et créer une relation entre elles en premier lieu. Utilisez le Concepteur de DataSet de VS.NET pour créer la relation. Dans

cet exemple, il y a trois DataTables : Clients, Commandes, Détails de commande. La feuille affiche toutes les informations client par défaut. Lorsque

l’utilisateur développe un client, la grille montre toutes les commandes que ce client a passées. Lorsque l’utilisateur développe une commande, la grille montre les détails

de cette commande. Les données sont hiérarchiques : les détails de commande sont répertoriés sous les commandes, et les commandes sont répertoriées sous les clients.

Pour que cela fonctionne, les relations suivantes doivent être établies entre les tables de données:

  1. Créer une clé étrangère sur DataTable Orders, le champ clé est CustomerID

todo:image_alt_text

  1. Créer une clé étrangère sur DataTable Order Details, le champ clé est OrderID.

todo:image_alt_text

Le Concepteur de DataSet ressemble maintenant à ceci:

todo:image_alt_text

Lier la feuille de travail

Utilisez maintenant le Concepteur de feuilles de travail pour définir la source de données et le membre de données pour la feuille, et configurer les colonnes de liaison de champ de donnée.

Le contrôle ajoute automatiquement une icône + pour chaque ligne correspondant à un enregistrement dont l’objet de liaison (généralement un objet DataRowView) a

des vues filles. Lorsque l’icône + est cliquée, l’enregistrement s’étend pour afficher la vue enfant. L’exemple ci-dessous utilise le Concepteur de feuilles de travail pour lier la

feuille de travail à la table de données parent Customers.

todo:image_alt_text

Personnaliser les Colonnnes de Liaison des Tables Enfants

Le contrôle fournit un événement appelé GridWeb.BindingChildView que les développeurs utilisent pour personnaliser les colonnes de liaison des tables enfants. Cet exemple

doit afficher le champ PrixUnitaire des détails de commande au format de devise. Ajoutez un gestionnaire d’événement pour changer le format de nombre de la colonne de liaison.

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;

    }

}

VB.NET

 '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

Charger des données à partir de la base de données et liaison

Comme décrit dans Liaison de la feuille de calcul à un jeu de données à l’aide du concepteur de feuilles de calcul de GridWeb, vous devez ajouter du code au bloc Page_Load pour charger des données dans le jeu de données à partir d’une base de données, et lier le jeu de données à la feuille dans la

prochaine étape.

La classe Asppose.Grid.Web.Data.WebWorksheet a certaines propriétés utiles.

  • Par exemple, la propriété EnableCreateBindColumnHeader est utilisée pour créer les en-têtes de la colonne liée dans la feuille, ou la colonne

headers affiche les noms des colonnes liées. Elle prend les valeurs true ou false.

  • Les propriétés BindStartRow et BindStartColumn spécifient la position dans la feuille du contrôle GridWeb auquel la source doit être liée.
  • La propriété EnableExpandChildView est utilisée pour désactiver la vue enfant étendue pour la feuille. Par défaut, elle est définie sur true.

La classe a aussi quelques méthodes utiles.

  • La méthode DataBind() lie une feuille à la source.
  • La méthode CreateNewBindRow() ajoute une nouvelle ligne et la lie à la source de données.
  • La méthode DeleteBindRow() supprime une ligne liée.
  • La méthode SetRowExpand() définit la ligne étendue et affiche le contenu de la vue enfant en mode de liaison de données.
  • La méthode GetRowExpand() obtient une valeur booléenne qui indique si la ligne est étendue ou non.

Dans le code ci-dessous, l’objet DataSet “dataSet21” est rempli de données basées sur trois tables. La table Customers est filtrée pour en faire la

première table dans l’affichage hiérarchique. Un objet WebWorksheet nommé “feuille” est créé, qui efface d’abord la feuille puis la lie

au source de données.

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

    }

}

VB.NET

 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