Lire en anglais

Partager via


TableCallback Délégué

Définition

Référence la méthode à appeler lors de la récupération de données de table auprès d'un fournisseur.

C#
public delegate void TableCallback(ICollection tableData);

Paramètres

tableData
ICollection

Données à récupérer du fournisseur.

Exemples

L’exemple de code suivant contient un contrôle composants WebPart nommé TableProviderWebPart qui sert de fournisseur de données sous la forme d’une table. Le contrôle inclut une implémentation de la GetTableData méthode, qui reçoit un paramètre de type TableCallback. Cette méthode appelle la méthode représentée par le TableCallback délégué qui transmet les données de table.

C#
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
//This sample code creates a Web Parts control that acts as a provider of table data.
namespace Samples.AspNet.CS.Controls
{
    public sealed class TableProviderWebPart : WebPart, IWebPartTable
    {
        DataTable _table;

        public TableProviderWebPart()
        {
            _table = new DataTable();

            DataColumn col = new DataColumn();
            col.DataType = typeof(string);
            col.ColumnName = "Name";
            _table.Columns.Add(col);

            col = new DataColumn();
            col.DataType = typeof(string);
            col.ColumnName = "Address";
            _table.Columns.Add(col);

            col = new DataColumn();
            col.DataType = typeof(int);
            col.ColumnName = "ZIP Code";
            _table.Columns.Add(col);

            DataRow row = _table.NewRow();
            row["Name"] = "John Q. Public";
            row["Address"] = "123 Main Street";
            row["ZIP Code"] = 98000;
            _table.Rows.Add(row);
        }

        public PropertyDescriptorCollection Schema
        {
            get
            {
                return TypeDescriptor.GetProperties(_table.DefaultView[0]);
            }
        }
        
        public void GetTableData(TableCallback callback)
        {
            callback(_table.Rows);
        }

        public bool ConnectionPointEnabled
        {
            get
            {
                object o = ViewState["ConnectionPointEnabled"];
                return (o != null) ? (bool)o : true;
            }
            set
            {
                ViewState["ConnectionPointEnabled"] = value;
            }
        }

        [ConnectionProvider("Table")]
        public IWebPartTable GetConnectionInterface()
        {
            return new TableProviderWebPart();
        }

        public class TableProviderConnectionPoint : ProviderConnectionPoint
        {
            public TableProviderConnectionPoint(MethodInfo callbackMethod, 
                Type interfaceType, Type controlType,
                string name, string id, bool allowsMultipleConnections)
                : base(callbackMethod, interfaceType, controlType,
                    name, id, allowsMultipleConnections)
            {
            }

            public override bool GetEnabled(Control control)
            {
                return ((TableProviderWebPart)control).ConnectionPointEnabled;
            }
        }
    }
}

Dans la OnPreRender méthode, le consommateur appelle GetTableData TableProviderWebPart et transmet sa GetTableData méthode en tant que délégué à appeler avec les données de table, comme illustré dans l’exemple de code suivant.

C#
namespace Samples.AspNet.CS.Controls
{
    using System;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Reflection;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Collections;

    public class TableConsumer : WebPart
    {
        private IWebPartTable _provider;
        private ICollection _tableData;

        private void GetTableData(object tableData)
        {
            _tableData = (ICollection)tableData;
        }

        protected override void OnPreRender(EventArgs e)
        {
            if (_provider != null)
            {
                _provider.GetTableData(new TableCallback(GetTableData));
            }
        }

        protected override void RenderContents(HtmlTextWriter writer)
        {
            if (_provider != null)
            {
                PropertyDescriptorCollection props = _provider.Schema;
                int count = 0;
                if (props != null && props.Count > 0 && _tableData != null)
                {
                    foreach (PropertyDescriptor prop in props)
                    {
                        foreach (DataRow o in _tableData)
                        {
                            writer.Write(prop.DisplayName + ": " + o[count]);
                        }
                        writer.WriteBreak();
                        writer.WriteLine();
                        count = count + 1;
                    }
                }
                else
                {
                    writer.Write("No data");
                }
            }
            else
            {
                writer.Write("Not connected");
            }
        }

        [ConnectionConsumer("Table")]
        public void SetConnectionInterface(IWebPartTable provider)
        {
            _provider = provider;
        }
    }
}

Les deux contrôles et la connexion sont inclus dans une page Web, comme illustré dans l’exemple suivant.

ASP.NET (C#)
<%@ page language="C#" %>
<%@ Register tagprefix="wp" Namespace="Samples.AspNet.CS.Controls"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ITable Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <!-- A static or dynamic connection is required to link two
             Web Parts controls. --->
        <asp:webpartmanager id="WebPartManager1" runat="server">
            <StaticConnections>
                <asp:WebPartConnection id="wp1" ProviderID="provider1" 
                   ConsumerID="consumer1">
                </asp:WebPartConnection>
            </StaticConnections>
        </asp:webpartmanager>
        <asp:webpartzone id="WebPartZone1" runat="server">
            <zoneTemplate>
            <!-- The following two lines define the 
              two connected controls. --->
            <wp:TableProviderWebPart ID="provider1" runat="server" 
               title="Web Parts Table Provider Control" />
            <wp:TableConsumer ID="consumer1" runat="server" 
               title="Web Parts Table Consumer Control"/>
            </zoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>

Remarques

Lorsqu’un contrôle composants WebPart implémente l’interface IWebPartTable et sert de fournisseur dans une connexion composants WebPart, le consommateur ou le transformateur doit récupérer et traiter les données de table du fournisseur. Le TableCallback délégué représente la méthode à appeler pour le traitement des données du fournisseur.

La GetTableData méthode contient un TableCallback paramètre délégué.

Méthodes d’extension

GetMethodInfo(Delegate)

Obtient un objet qui représente la méthode représentée par le délégué spécifié.

S’applique à

Produit Versions
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8