IWebPartTable IWebPartTable IWebPartTable IWebPartTable Interface

Definizione

Definisce un'interfaccia provider per la connessione di due controlli server tramite un'intera tabella di dati.Defines a provider interface for connecting two server controls using an entire table of data.

public interface class IWebPartTable
public interface IWebPartTable
type IWebPartTable = interface
Public Interface IWebPartTable

Esempi

Nell'esempio di codice riportato di seguito viene illustrato come creare una connessione statica tra due IWebPartTable controlli utilizzando l'interfaccia.The following code example demonstrates how to create a static connection between two controls using the IWebPartTable interface. L'esempio di codice è costituito da tre parti:The code example has three parts:

  • Codice sorgente per due controlli WebPart personalizzati che possono formare una connessione utilizzando l' IWebPartTable interfaccia, con un controllo che funge da provider e l'altro che funge da consumer.Source code for two custom WebPart controls that can form a connection using the IWebPartTable interface, with one control acting as the provider and the other acting as the consumer.

  • Pagina Web che ospita i controlli e dichiara la connessione statica nel formato di persistenza.A Web page that hosts the controls and declares the static connection in persistence format.

  • Descrizione di cosa accade quando viene eseguito il codice di esempio.A description of what happens when the example code runs.

La prima parte dell'esempio di codice è il codice sorgente per i due controlli personalizzati.The first part of the code example is the source code for the two custom controls. Il primo è il codice per il provider, che implementa IWebPartTable l'interfaccia.First is the code for the provider, which implements the IWebPartTable interface. Per semplicità nell'esempio, il provider crea una tabella con alcuni dati anziché connettersi a un database.For simplicity in the example, the provider creates a table with some data rather than connecting to a database. Il GetConnectionInterface metodo funge da punto di connessione del provider, il metodo di callback che restituisce l'istanza dell'interfaccia al consumer.The GetConnectionInterface method serves as the provider's connection point, the callback method that returns the interface instance to the consumer. Come per il consumer, recupera l'istanza dell'interfaccia dal provider nel metodo denominato SetConnectionInterface, contrassegnato con un ConnectionConsumer attributo.As for the consumer, it retrieves the interface instance from the provider in its method named SetConnectionInterface, which is marked with a ConnectionConsumer attribute. Dopo aver recuperato l'istanza dell'interfaccia, il consumer, nel OnPreRender metodo, chiama l'implementazione GetTableData del metodo nel provider per recuperare i dati effettivi e scriverli nella pagina.After retrieving the instance of the interface, the consumer, in its OnPreRender method, calls the implementation of the GetTableData method in the provider, to retrieve the actual data and write it to the page.

Per eseguire l'esempio di codice, è necessario compilare questo codice sorgente.For the code example to run, you must compile this source code. È possibile compilarlo in modo esplicito e inserire l'assembly risultante nella cartella bin del sito Web o nel Global Assembly Cache.You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. In alternativa, è possibile inserire il codice sorgente nella cartella App_Code del sito, in cui verrà compilato dinamicamente in fase di esecuzione.Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. In questo esempio di codice viene utilizzata la compilazione dinamica.This code example uses dynamic compilation. Per una procedura dettagliata che illustra come eseguire la compilazione , vedere Procedura dettagliata: Sviluppo e utilizzo di un controlloserver Web personalizzato.For a walkthrough that demonstrates how to compile, see Walkthrough: Developing and Using a Custom Web Server Control.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Samples.AspNet.CS.Controls
{
  // This sample code creates a Web Parts control that acts as a provider 
  // of table data.
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
    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", typeof(TableProviderConnectionPoint), 
      AllowsMultipleConnections = true)]
        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;
            }

        }

    }


  // This code sample creates a Web Parts control that acts as a consumer 
  // of information provided by the TableProvider.ascx control.
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  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;
    }

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

    } // TableConsumerConnectionPoint

  } // TableConsumer

} // Samples.AspNet.CS.Controls
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Reflection
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  ' This sample code creates a Web Parts control that acts as a provider 
  ' of table data.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public NotInheritable Class TableProviderWebPart
    Inherits WebPart
    Implements IWebPartTable
    Private _table As DataTable


    Public Sub New()
      _table = New DataTable()

      Dim col As New DataColumn()
      col.DataType = GetType(String)
      col.ColumnName = "Name"
      _table.Columns.Add(col)

      col = New DataColumn()
      col.DataType = GetType(String)
      col.ColumnName = "Address"
      _table.Columns.Add(col)

      col = New DataColumn()
      col.DataType = GetType(Integer)
      col.ColumnName = "ZIP Code"
      _table.Columns.Add(col)

      Dim row As DataRow = _table.NewRow()
      row("Name") = "John Q. Public"
      row("Address") = "123 Main Street"
      row("ZIP Code") = 98000
      _table.Rows.Add(row)

    End Sub


    Public ReadOnly Property Schema() As _
      ComponentModel.PropertyDescriptorCollection Implements IWebPartTable.Schema

      Get
        Return TypeDescriptor.GetProperties(_table.DefaultView(0))
      End Get

    End Property


    Public Sub GetTableData(ByVal callback As TableCallback) _
      Implements IWebPartTable.GetTableData

      callback(_table.Rows)

    End Sub


    Public Property ConnectionPointEnabled() As Boolean
      Get
        Dim o As Object = ViewState("ConnectionPointEnabled")
        Return IIf(Not (o Is Nothing), CBool(o), True)
      End Get
      Set(ByVal value As Boolean)
        ViewState("ConnectionPointEnabled") = value
      End Set
    End Property


    <ConnectionProvider("Table", GetType(TableProviderConnectionPoint), _
      AllowsMultipleConnections:=True)> _
    Public Function GetConnectionInterface() As IWebPartTable

      Return New TableProviderWebPart()

    End Function

  End Class

  ' The connection point for the provider control.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class TableProviderConnectionPoint
    Inherits ProviderConnectionPoint

    Public Sub New(ByVal callbackMethod As MethodInfo, _
      ByVal interfaceType As Type, ByVal controlType As Type, _
      ByVal name As String, ByVal id As String, _
      ByVal allowsMultipleConnections As Boolean)
      MyBase.New(callbackMethod, interfaceType, controlType, _
        name, id, allowsMultipleConnections)

    End Sub


    Public Overrides Function GetEnabled(ByVal control _
      As Control) As Boolean

      Return CType(control, TableProviderWebPart).ConnectionPointEnabled

    End Function
  End Class


  ' This code sample creates a Web Parts control that acts as a consumer 
  ' of information provided by the TableProvider.ascx control.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class TableConsumer
    Inherits WebPart
    Private _provider As IWebPartTable
    Private _tableData As ICollection


    Private Sub GetTableData(ByVal tableData As ICollection)
      _tableData = CType(tableData, ICollection)

    End Sub


    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
      If Not (_provider Is Nothing) Then
        _provider.GetTableData(New TableCallback(AddressOf GetTableData))
      End If

    End Sub


    Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)
      If Not (_provider Is Nothing) Then
        Dim props As PropertyDescriptorCollection = _provider.Schema
        Dim count As Integer = 0
        If Not (props Is Nothing) AndAlso props.Count > 0 _
          AndAlso Not (_tableData Is Nothing) Then

          Dim prop As PropertyDescriptor
          For Each prop In props
            Dim o As DataRow
            For Each o In _tableData
              writer.Write(prop.DisplayName & ": " & o(count))
            Next o
            writer.WriteBreak()
            writer.WriteLine()
            count = count + 1
          Next prop
        Else
          writer.Write("No data")
        End If
      Else
        writer.Write("Not connected")
      End If

    End Sub


    <ConnectionConsumer("Table")> _
    Public Sub SetConnectionInterface(ByVal provider As IWebPartTable)
      _provider = provider

    End Sub

  End Class

  ' The connection point for the consumer control.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class TableConsumerConnectionPoint
    Inherits ConsumerConnectionPoint

    Public Sub New(ByVal callbackMethod As MethodInfo, _
      ByVal interfaceType As Type, ByVal controlType As Type, _
      ByVal name As String, ByVal id As String, _
      ByVal allowsMultipleConnections As Boolean)
      MyBase.New(callbackMethod, interfaceType, controlType, name, _
        id, allowsMultipleConnections)

    End Sub
  End Class

End Namespace  ' Samples.AspNet.CS.Controls

La seconda parte dell'esempio di codice è la pagina Web che dichiara la connessione statica e ospita i controlli.The second part of the code example is the Web page that declares the static connection and hosts the controls. Nella parte superiore della pagina è presente una Register direttiva che dichiara lo spazio dei nomi del codice sorgente contenuto nella directory App_Code.Near the top of the page is a Register directive that declares the namespace of the source code contained in the App_Code directory. La connessione viene dichiarata <asp:webpartconnection> utilizzando un elemento.The connection is declared using an <asp:webpartconnection> element. I controlli consumer e provider personalizzati sono dichiarati in <zonetemplate> un <asp:webpartzone> elemento all'interno di un elemento, che è necessario per consentire la connessione (devono risiedere all'interno di una WebPartZoneBase zona che eredita dalla classe).The custom consumer and provider controls are declared in a <zonetemplate> element within an <asp:webpartzone> element, which is required for them to be able to connect (they must reside within a zone that inherits from the WebPartZoneBase class).

<%@ page language="C#" %>
<%@ Register tagprefix="IRow" 
    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">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>IRow Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <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>
            <irow:RowProviderWebPart ID="provider1" runat="server" 
              Title="Row Provider Control" />
            <irow:RowConsumerWebPart ID="consumer1" runat="server" 
              Title="Row Consumer Control" />
          </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>
<%@ page language="VB" %>
<%@ Register tagprefix="IRow" 
    Namespace="Samples.AspNet.VB.Controls" %>

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

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>IRow Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <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>
            <irow:RowProviderWebPart ID="provider1" runat="server" 
              Title="Row Provider Control" />
            <irow:RowConsumerWebPart ID="consumer1" runat="server" 
              Title="Row Consumer Control" />
          </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>

Caricare la pagina in un browser.Load the page in a browser. Il controllo consumer Visualizza i dati forniti dalla tabella specificata, che il provider rende disponibile tramite un'istanza dell' IWebPartTable interfaccia.The consumer control displays the data provided from the specified table, which the provider makes available through an instance of the IWebPartTable interface.

Commenti

Questa interfaccia è progettata per essere utilizzata con connessioni Web part.This interface is designed to be used with Web Parts connections. In una connessione Web part, due controlli server che si trovano in una WebPartZoneBase zona stabiliscono una connessione e condividono i dati, con un controllo che funge da consumer e l'altro controllo che funge da provider.In a Web Parts connection, two server controls that reside in a WebPartZoneBase zone establish a connection and share data, with one control acting as the consumer and the other control acting as a provider. Il meccanismo di condivisione dei dati in una connessione Web part è un'istanza di interfaccia, che il provider serve al consumer per mezzo di un metodo di callback.The mechanism for sharing data in a Web Parts connection is an interface instance, which the provider serves to the consumer by means of a callback method. Per stabilire una connessione, il consumer e il provider devono entrambi funzionare con lo stesso tipo di interfaccia per la condivisione dei dati.To establish a connection, the consumer and provider must both work with the same interface type for sharing data. Se il consumer non riconosce il tipo di interfaccia inviato dal provider, è comunque possibile connettere i controlli per mezzo di un trasformatore (un WebPartTransformer oggetto) che converte l'istanza dell'interfaccia inviata dal provider in un tipo che il consumer riconosce.If the consumer does not recognize the interface type sent by the provider, it is still possible to connect the controls by means of a transformer (a WebPartTransformer object) that translates the interface instance sent by the provider into a type that the consumer recognizes. Per informazioni dettagliate sulle connessioni, WebPartConnection vedere e Web part panoramica delle connessioni.For details on connections, see WebPartConnection and Web Parts Connections Overview.

L' IWebPartTable interfaccia è un'interfaccia del provider inclusa nel set di controlli Web part come interfaccia standard per la creazione di connessioni basate su una tabella di dati.The IWebPartTable interface is a provider interface included with the Web Parts control set as a standard interface for creating connections based on a data table. È inoltre possibile creare interfacce personalizzate da utilizzare con le connessioni Web part, ma in molte applicazioni Web basate sui dati è utile creare connessioni basate su un campo comune (per informazioni dettagliate, vedere l' IWebPartField interfaccia), riga (per informazioni dettagliate, vedere IWebPartRow interfaccia) o tabella dall'origine dati.You can also create custom interfaces to use with Web Parts connections, but in many data-driven Web applications, it is useful to create connections based on a common field (for details, see the IWebPartField interface), row (for details, see the IWebPartRow interface), or table from the data source. In una connessione tipica, un WebPart controllo che funge da provider implementa l' IWebPartTable interfaccia e fornisce un'istanza dell'interfaccia ai consumer in un metodo di callback speciale.In a typical connection, a WebPart control acting as a provider would implement the IWebPartTable interface and provide an instance of the interface to consumers in a special callback method. È ad esempio possibile che il provider implementi un' IWebPartTable interfaccia per una tabella che contiene dati relativi alle prestazioni finanziarie.For example, the provider might implement an IWebPartTable interface for a table that contains financial performance data. Un WebPart altro controllo che funge da consumer definirebbe un metodo speciale per ricevere l'istanza dell'interfaccia e quindi estrarre i dati ed eseguire il rendering di un grafico per visualizzare le informazioni risultanti.Another WebPart control acting as a consumer would define a special method to receive the interface instance, and could then extract the data and render a chart to display the resulting information.

L' IWebPartTable interfaccia dispone di due membri esposti.The IWebPartTable interface has two exposed members. La Schema proprietà restituisce le informazioni sullo schema relative alla tabella dati incapsulata in un PropertyDescriptorCollection oggetto.The Schema property returns schema information about the data table encapsulated in a PropertyDescriptorCollection object. Il GetTableData metodo dichiara un metodo utilizzato da un implementatore (ad esempio un controllo del provider) per recuperare i dati della tabella dell'istanza dell'interfaccia quando viene richiamato il metodo di callback.The GetTableData method declares a method that an implementer (such as a provider control) uses to retrieve the interface instance's table data when the callback method is invoked.

Proprietà

Schema Schema Schema Schema

Ottiene le informazioni sullo schema per una tabella di dati utilizzata per condividere i dati tra due controlli WebPart.Gets the schema information for a data table that is used to share data between two WebPart controls.

Metodi

GetTableData(TableCallback) GetTableData(TableCallback) GetTableData(TableCallback) GetTableData(TableCallback)

Restituisce i dati per la tabella utilizzata dall'interfaccia come base della connessione tra due controlli WebPart.Returns the data for the table that is being used by the interface as the basis of a connection between two WebPart controls.

Si applica a

Vedi anche