TableCallback Delegate
References the method to call when retrieving table data from a provider.
Assembly: System.Web (in System.Web.dll)
Parameters
- tableData
-
Type:
System.Collections.ICollection
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 'NewNew <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 'NewNew 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" %> <!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:TableConsumerWebPart ID="consumer1" runat="server" title="Web Parts Table Consumer Control"/> </zoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
Available since 2.0