Exporter (0) Imprimer
Développer tout

HierarchicalDataSourceControl, classe

Remarque : cette classe est nouvelle dans le .NET Framework version 2.0.

Fournit une classe de base pour les contrôles de source de données qui représentent des données hiérarchiques.

Espace de noms : System.Web.UI
Assembly : System.Web (dans system.web.dll)

[BindableAttribute(false)] 
public abstract class HierarchicalDataSourceControl : Control, IHierarchicalDataSource
/** @attribute BindableAttribute(false) */ 
public abstract class HierarchicalDataSourceControl extends Control implements IHierarchicalDataSource
BindableAttribute(false) 
public abstract class HierarchicalDataSourceControl extends Control implements IHierarchicalDataSource

ASP.NET prend en charge une architecture de contrôles de liaison de données qui permet à des contrôles serveur Web de se lier à des données et de les présenter de manière cohérente. Les contrôles serveur Web qui effectuent la liaison avec les données sont appelés contrôles liés aux données, et les classes qui facilitent cette liaison sont appelées contrôles de source de données. Les contrôles de source de données peuvent représenter une source de données : une base de données relationnelle, un fichier, un flux de données, un objet métier, etc. Les contrôles de source de données présentent les données de façon cohérente aux contrôles liés aux données, quels que soient la source et le format des données sous-jacentes.

Les contrôles de source de données qui représentent des données hiérarchiques dérivent de la classe HierarchicalDataSourceControl, tandis que les contrôles de source de données qui représentent des listes ou des tableaux de données dérivent de la classe DataSourceControl. La classe HierarchicalDataSourceControl constitue l'implémentation de base de l'interface IHierarchicalDataSource qui définit une méthode unique pour récupérer des objets de vue de sources de données hiérarchiques associés au contrôle de source de données, GetHierarchicalView.

Considérez un contrôle de source de données comme la combinaison de l'objet HierarchicalDataSourceControl et de ses vues associées sur les données sous-jacentes, appelées objets d'affichage de source de données. Alors que les contrôles de source de données qui représentent les données tabulaires sont généralement associés à une seule vue nommée, la classe HierarchicalDataSourceControl prend en charge un affichage de source de données pour chaque niveau de données hiérarchiques que représente le contrôle de source de données. Le niveau de données hiérarchiques est identifié par un chemin d'accès hiérarchique unique, passé à la méthode GetHierarchicalView dans le paramètre viewPath. Chaque objet HierarchicalDataSourceView définit les capacités d'un contrôle de source de données pour le niveau hiérarchique représenté et exécute des opérations telles que l'insertion, la mise à jour, la suppression et le tri.

Les contrôles serveur Web qui dérivent de la classe HierarchicalDataBoundControl, tels que TreeView, utilisent des contrôles de source de données hiérarchiques pour établir une liaison avec des données hiérarchiques.

Les contrôles de source de données sont implémentés en tant que contrôles pour activer la persistance déclarative et pour éventuellement autoriser la participation à la gestion de l'état. Les contrôles de source de données ne présentent aucun rendu visuel, et par conséquent ne prennent pas les thèmes en charge.

L'exemple de code suivant montre comment étendre la classe HierarchicalDataSourceControl abstraite et la classe HierarchicalDataSourceView, et comment implémenter les interfaces IHierarchicalEnumerable et IHierarchyData pour créer un contrôle de source de données hiérarchique qui récupère des informations de système de fichiers. Le contrôle FileSystemDataSource permet aux contrôles serveur Web d'établir une liaison avec des objets FileSystemInfo et d'afficher des informations de système de fichiers de base. La classe FileSystemDataSource de l'exemple fournit l'implémentation de la méthode GetHierarchicalView qui récupère un objet FileSystemDataSourceView. L'objet FileSystemDataSourceView récupère les données dans le stockage spécifique sous-jacent ; dans le cas présent, des informations de système de fichiers sur le serveur Web. Pour des raisons de sécurité, les informations relatives au système de fichiers s'affichent uniquement si le contrôle de source de données est utilisé dans un localhost, scénario authentifié, et commencent uniquement par le répertoire virtuel dans lequel réside la page Web Forms qui utilise le contrôle de source de données. Enfin deux classes qui implémentent IHierarchicalEnumerable et IHierarchyData sont fournies pour encapsuler les objets FileSystemInfo que le FileSystemDataSource utilise.

using System;
using System.Collections;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
public class FileSystemDataSource : HierarchicalDataSourceControl, IHierarchicalDataSource
{
    public FileSystemDataSource() : base() {}

    // Return a strongly typed view for the current data source control.
    private FileSystemDataSourceView view = null;
    protected override HierarchicalDataSourceView GetHierarchicalView(string viewPath) {
        if (null == view) {
            view = new FileSystemDataSourceView(viewPath);
        }
        return view;
    }

    // The FileSystemDataSource can be used declaratively. To enable
    // declarative use, override the default implementation of
    // CreateControlCollection to return a ControlCollection that
    // you can add to.
    protected override ControlCollection CreateControlCollection() {
        return new ControlCollection(this);
    }
}
// The FileSystemDataSourceView class encapsulates the
// capabilities of the FileSystemDataSource data source control.
public class FileSystemDataSourceView : HierarchicalDataSourceView
{
private string _viewPath;

    public FileSystemDataSourceView(string viewPath)
    {
        // This implementation of HierarchicalDataSourceView does not
        // use the viewPath parameter but other implementations
        // could make use of it for retrieving values.
        _viewPath = viewPath;
    }

    // Starting with the rootNode, recursively build a list of
    // FileSystemInfo nodes, create FileSystemHierarchyData
    // objects, add them all to the FileSystemHierarchicalEnumerable,
    // and return the list.
    public override IHierarchicalEnumerable Select() {
        HttpRequest currentRequest = HttpContext.Current.Request;

        // SECURITY: There are many security issues that can be raised
        // SECURITY: by exposing the file system structure of a Web server
        // SECURITY: to an anonymous user in a limited trust scenario such as
        // SECURITY: a Web page served on an intranet or the Internet.
        // SECURITY: For this reason, the FileSystemDataSource only
        // SECURITY: shows data when the HttpRequest is received
        // SECURITY: from a local Web server. In addition, the data source
        // SECURITY: does not display data to anonymous users.
        if ( currentRequest.IsAuthenticated &&
            (currentRequest.UserHostAddress == "127.0.0.1" ||
             currentRequest.UserHostAddress == "::1"))
        {
            string rootPath = currentRequest.MapPath (currentRequest.ApplicationPath);

            DirectoryInfo rootDirectory = new DirectoryInfo(rootPath);

            FileSystemHierarchicalEnumerable fshe = new FileSystemHierarchicalEnumerable();

            foreach (FileSystemInfo fsi in rootDirectory.GetFileSystemInfos()) {
                fshe.Add(new FileSystemHierarchyData(fsi));
            }
            return fshe;
        }
        else {
            throw new NotSupportedException("The FileSystemDataSource only " + "presents data in an authenticated, localhost context.");
        }
    }
}
// A collection of FileSystemHierarchyData objects
public class FileSystemHierarchicalEnumerable : ArrayList, IHierarchicalEnumerable
{
    public FileSystemHierarchicalEnumerable () : base (){
    }

    public IHierarchyData GetHierarchyData(object enumeratedItem) {
        return enumeratedItem as IHierarchyData;
    }
}

public class FileSystemHierarchyData : IHierarchyData
{
    public FileSystemHierarchyData (FileSystemInfo obj) {
        fileSystemObject = obj;
    }

    private FileSystemInfo fileSystemObject = null;

    public override string ToString() {
        return fileSystemObject.Name;
    }
    // IHierarchyData implementation.
    public bool HasChildren {
        get {
            if (typeof(DirectoryInfo) ==  fileSystemObject.GetType()   ) {
                DirectoryInfo temp = (DirectoryInfo) fileSystemObject;
                return (temp.GetFileSystemInfos().Length > 0);
            }
            else return false;
        }
    }
    // DirectoryInfo returns the OriginalPath, while FileInfo returns
    // a fully qualified path.
    public string Path {
        get {
            return fileSystemObject.ToString();
        }
    }
    public object Item {
        get {
            return fileSystemObject;
        }
    }
    public string Type {
        get {
            return "FileSystemData";
        }
    }
    public IHierarchicalEnumerable GetChildren() {
        FileSystemHierarchicalEnumerable children =
            new FileSystemHierarchicalEnumerable();

        if (typeof(DirectoryInfo) == fileSystemObject.GetType()) {
            DirectoryInfo temp = (DirectoryInfo)fileSystemObject;
            foreach (FileSystemInfo fsi in temp.GetFileSystemInfos()) {
                children.Add(new FileSystemHierarchyData(fsi));
            }
        }
        return children;
    }

    public IHierarchyData GetParent()
    {
        FileSystemHierarchicalEnumerable parentContainer =
            new FileSystemHierarchicalEnumerable();

        if (typeof(DirectoryInfo) == fileSystemObject.GetType())
        {
            DirectoryInfo temp = (DirectoryInfo)fileSystemObject;
            return new FileSystemHierarchyData(temp.Parent);
        }
        else if (typeof(FileInfo) == fileSystemObject.GetType())
        {
            FileInfo temp = (FileInfo)fileSystemObject;
            return new FileSystemHierarchyData(temp.Directory);
        }
        // If FileSystemObj is any other kind of FileSystemInfo, ignore it.
        return null;
    }
}

L'exemple de code suivant montre comment lier de manière déclarative un contrôle TreeView aux données de système de fichiers à l'aide de l'exemple FileSystemDataSource.

using System;
using System.Collections;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
public class FileSystemDataSource : HierarchicalDataSourceControl, IHierarchicalDataSource
{
    public FileSystemDataSource() : base() {}

    // Return a strongly typed view for the current data source control.
    private FileSystemDataSourceView view = null;
    protected override HierarchicalDataSourceView GetHierarchicalView(string viewPath) {
        if (null == view) {
            view = new FileSystemDataSourceView(viewPath);
        }
        return view;
    }

    // The FileSystemDataSource can be used declaratively. To enable
    // declarative use, override the default implementation of
    // CreateControlCollection to return a ControlCollection that
    // you can add to.
    protected override ControlCollection CreateControlCollection() {
        return new ControlCollection(this);
    }
}

  • AspNetHostingPermission  pour opérer dans un environnement hébergé. Valeur de demande : LinkDemand ; valeur d'autorisation : Minimal
  • AspNetHostingPermission  pour opérer dans un environnement hébergé. Valeur de demande : InheritanceDemand ; valeur d'autorisation : Minimal

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft