TableCallback Delegate
Assembly: System.Web (in system.web.dll)
'Declaration Public Delegate Sub TableCallback ( _ tableData As ICollection _ ) 'Usage Dim instance As New TableCallback(AddressOf HandlerMethod)
/** @delegate */ public delegate void TableCallback ( ICollection tableData )
JScript supports the use of delegates, but not the declaration of new ones.
Parameters
- tableData
The data to retrieve from the provider.
When a Web Parts control implements the IWebPartTable interface and serves as a provider in a Web Parts connection, the consumer or transformer must retrieve and process the table data from the provider. The TableCallback delegate represents the method to call for processing the provider data.
The GetTableData method contains a TableCallback delegate parameter.
The following code example contains a Web Parts control named TableProviderWebPart that serves as a provider of data in the form of a table. The control includes an implementation of the GetTableData method, which receives a parameter of type TableCallback. This method calls the method represented by the TableCallback delegate passing the table data.
Imports System Imports System.Collections Imports System.ComponentModel Imports System.Data Imports System.Reflection Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts 'This sample code creates a Web Parts control that acts as a provider of table data. Namespace Samples.AspNet.VB.Controls 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 'New <ConnectionProvider("Table")> _ Public Function GetConnectionInterface() As IWebPartTable Return New TableProviderWebPart() End Function 'GetConnectionInterface Public ReadOnly Property Schema() As PropertyDescriptorCollection _ Implements IWebPartTable.Schema Get Return TypeDescriptor.GetProperties(_table.DefaultView(0)) End Get End Property Public Property ConnectionPointEnabled() As Boolean Get Dim o As Object o = ViewState("ConnectionPointEnabled") If Not (o Is Nothing) Then Return CBool(o) Else Return True End If End Get Set(ByVal value As Boolean) ViewState("ConnectionPointEnabled") = value End Set End Property Public Sub GetTableData(ByVal callback As TableCallback) _ Implements IWebPartTable.GetTableData callback(_table.Rows) End Sub 'GetTableData End Class 'TableProviderWebPart End Namespace
In the OnPreRender method, the consumer calls GetTableData in TableProviderWebPart and passes its GetTableData method as the delegate to call with the table data, as shown in the following code example.
Imports System Imports System.ComponentModel Imports System.Reflection Imports System.Collections Imports System.Data Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts Namespace Samples.AspNet.VB.Controls Public Class TableConsumerWebPart Inherits WebPart Private _provider As IWebPartTable Private _tableData As ICollection Private Sub GetTableData(ByVal tableData As ICollection) _tableData = CType(tableData, ICollection) End Sub 'GetTableValue Protected Overrides Sub OnPreRender(ByVal e As EventArgs) If Not (_provider Is Nothing) Then _provider.GetTableData((New TableCallback(AddressOf GetTableData))) End If 'MyBase.OnPreRender(e) End Sub 'OnPreRender 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 For Each prop As PropertyDescriptor In props For Each o As DataRow In _tableData writer.Write(prop.DisplayName & ": " & o(count).ToString()) Next writer.WriteBreak() writer.WriteLine() count = count + 1 Next Else writer.Write("No data") End If Else writer.Write("Not connected") End If End Sub 'RenderContents <ConnectionConsumer("Table")> _ Public Sub SetConnectionInterface(ByVal provider As IWebPartTable) _provider = provider End Sub 'SetConnectionInterface Private 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 'New End Class 'TableConsumerConnectionPoint End Class 'TableConsumerWebPart End Namespace
The two controls and the connection are included in a Web page, as shown in the following example.
<%@ Page Language="VB" %> <%@ Register tagprefix=wp Namespace=Samples.AspNet.VB.Controls %> <script runat="server"> </script> <html> <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:TableConsumerWebPart ID=consumer1 runat=Server title="Web Parts Table Consumer Control"/> </zoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.