Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

IWebPartTable Interface

Defines a provider interface for connecting two server controls using an entire table of data.

Namespace:  System.Web.UI.WebControls.WebParts
Assembly:  System.Web (in System.Web.dll)

Public Interface IWebPartTable

The IWebPartTable type exposes the following members.

Public propertySchemaGets the schema information for a data table that is used to share data between two WebPart controls.

Public methodGetTableDataReturns the data for the table that is being used by the interface as the basis of a connection between two WebPart controls.

This interface is designed to be used with Web Parts connections. 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. 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. To establish a connection, the consumer and provider must both work with the same interface type for sharing data. 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. For details on connections, see WebPartConnection and Web Parts Connections Overview.

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. 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 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. For example, the provider might implement an IWebPartTable interface for a table that contains financial performance data. 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.

The IWebPartTable interface has two exposed members. The Schema property returns schema information about the data table encapsulated in a PropertyDescriptorCollection object. 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.

The following code example demonstrates how to create a static connection between two controls using the IWebPartTable interface. The code example has three parts:

  • 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.

  • A Web page that hosts the controls and declares the static connection in persistence format.

  • A description of what happens when the example code runs.

The first part of the code example is the source code for the two custom controls. First is the code for the provider, which implements the IWebPartTable interface. For simplicity in the example, the provider creates a table with some data rather than connecting to a database. The GetConnectionInterface method serves as the provider's connection point, the callback method that returns the interface instance to the consumer. As for the consumer, it retrieves the interface instance from the provider in its method named SetConnectionInterface, which is marked with a ConnectionConsumer attribute. 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.

For the code example to run, you must compile this source code. You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. This code example uses dynamic compilation. For a walkthrough that demonstrates how to compile, see Walkthrough: Developing and Using a Custom Web Server Control.

Imports System
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"

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

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

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

    End Sub 

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

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

    End Property 

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


    End Sub 

    Public Property ConnectionPointEnabled() As Boolean 
        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 'TableProviderWebPart

  ' 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
            count = count + 1
          Next prop
          writer.Write("No data")
        End If 
        writer.Write("Not connected")
      End If 

    End Sub

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

    End Sub 

  End Class 'TableConsumer

  ' 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 'TableConsumerConnectionPoint

End Namespace  ' Samples.AspNet.CS.Controls

The second part of the code example is the Web page that declares the static connection and hosts the controls. Near the top of the page is a Register directive that declares the namespace of the source code contained in the App_Code directory. The connection is declared using an <asp:webpartconnection> element. 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="VB" %>
<%@ Register tagprefix="IRow" 
    Namespace="Samples.AspNet.VB.Controls" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>IRow Test Page</title>
    <form id="form1" runat="server">
      <asp:webpartmanager ID="WebPartManager1" runat="server">
          <asp:webpartconnection ID="wp1" ProviderID="provider1" 

        <asp:webpartzone ID="WebPartZone1" runat="server">
            <irow:RowProviderWebPart ID="provider1" runat="server" 
              Title="Row Provider Control" />
            <irow:RowConsumerWebPart ID="consumer1" runat="server" 
              Title="Row Consumer Control" />

Load the page in a browser. The consumer control displays the data provided from the specified table, which the provider makes available through an instance of the IWebPartTable interface.

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0
© 2015 Microsoft