ConnectionConsumerAttribute Klass

Definition

Identifierar motringningsmetoden i en serverkontroll som fungerar som konsument i en webbdelsanslutning och gör det möjligt för utvecklare att ange information om konsumentens anslutningspunkt.

public ref class ConnectionConsumerAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public class ConnectionConsumerAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type ConnectionConsumerAttribute = class
    inherit Attribute
Public Class ConnectionConsumerAttribute
Inherits Attribute
Arv
ConnectionConsumerAttribute
Attribut

Exempel

I följande kodexempel visas hur du använder ConnectionConsumerAttribute klassen genom att visa hur du deklarerar ConnectionConsumerAttribute metadataelementet på en motringningsmetod i en konsumentkontroll. Observera att konstruktorns enklaste överlagring används. endast parametervärdet displayName anges.

[ConnectionConsumer("Row")]
public void SetConnectionInterface(IWebPartRow provider) 
{
    _provider = provider;
}
    <ConnectionConsumer("Row")> _
    Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
        _provider = provider

    End Sub
End Class

Följande kodexempel visar hur du skapar en grundläggande, statisk anslutning mellan två webbdelskontroller med hjälp av WebPartConnection -klassen. Provider- och konsumentkodfilerna ska placeras i mappen App_Code under programmappen som innehåller sidan .aspx.

Det första exemplet visar en klass som fungerar som leverantör.

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 row data.
namespace My 
{
    public sealed class RowProviderWebPart : WebPart, IWebPartRow 
    {

        private DataTable _table;

        public RowProviderWebPart() 
        {
            _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);
        }
        [ConnectionProvider("Row")]
        public IWebPartRow GetConnectionInterface()
        {
            return new RowProviderWebPart();
        }
        public PropertyDescriptorCollection Schema 
        {
            get {
                return TypeDescriptor.GetProperties(_table.DefaultView[0]);
                }
        }
        public void GetRowData(RowCallback callback)
        {
            callback(_table.Rows);
        }
    }
}
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 row data.
Namespace MyCustomWebPart

    Public NotInheritable Class RowProviderWebPart
        Inherits WebPart
        Implements IWebPartRow

        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

        <ConnectionProvider("Row")> _
        Public Function GetConnectionInterface() As IWebPartRow
            Return New RowProviderWebPart()

        End Function 'GetConnectionInterface

        Public ReadOnly Property Schema() As PropertyDescriptorCollection _
            Implements IWebPartRow.Schema
            Get
                Return TypeDescriptor.GetProperties(_table.DefaultView(0))
            End Get
        End Property

        Public Sub GetRowData(ByVal callback As RowCallback) _
            Implements IWebPartRow.GetRowData
            callback(_table.Rows)

        End Sub
    End Class

Det andra exemplet visar en klass som fungerar som konsument. Observera att en metod har angetts som motringningsmetod med ConnectionConsumerAttribute metadataelementet.

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 consumer of row data.
namespace My 
{

    public sealed class RowConsumerWebPart : WebPart {
        private IWebPartRow _provider;
        private ICollection _tableData;
    
            private void GetRowData(object rowData)
            {
                _tableData = (ICollection)rowData;
            }

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

        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("Row")]
        public void SetConnectionInterface(IWebPartRow provider) 
        {
            _provider = provider;
        }
         }
    }
//}
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 consumer of row data.
Namespace MyCustomWebPart

    Public NotInheritable Class RowConsumerWebPart
        Inherits WebPart
        Private _provider As IWebPartRow
        Private _tableData As ICollection


        Private Sub GetRowData(ByVal rowData As Object)
            _tableData = CType(rowData, ICollection)

        End Sub


        Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
            If Not (_provider Is Nothing) Then
                '        _provider.GetRowData(AddressOf (New RowCallback(GetRowData)))
                _provider.GetRowData(AddressOf GetRowData)
                '    _provider.GetRowData(New RowCallback(AddressOf GetRowData))
            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))
                            writer.WriteBreak()
                            writer.WriteLine()
                            count = count + 1
                        Next o
                    Next prop
                Else
                    writer.Write("No data")
                End If
            Else
                writer.Write("Not connected")
            End If

        End Sub

        <ConnectionConsumer("Row")> _
        Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
            _provider = provider

        End Sub
    End Class

Det sista exemplet visar sidan ASP.NET som innehåller de två kontrollerna.

<%@ page language="C#" %>
<%@ register TagPrefix="my" Namespace="My" %>

<!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>
        <!-- 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 specify the two connected controls. --->
                <my:RowProviderWebPart ID="provider1" runat="server" ToolTip="Row Provider Control" />
                <my:RowConsumerWebPart ID="consumer1" runat="server" ToolTip="Row Consumer Control" />
            </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>
<%@ page language="VB" %>
<%@ Register TagPrefix="my" Namespace="MyCustomWebPart" %>

<!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>
        <!-- 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>
                <my:RowProviderWebPart ID="provider1" runat="server" ToolTip="Row Provider Control" />
                <my:RowConsumerWebPart ID="consumer1" runat="server" ToolTip="Row Consumer Control" />
           </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>

Kommentarer

En webbdelsanslutning består av två serverkontroller som finns i en WebPartZoneBase zon och delar data med hjälp av en gränssnittsinstans som skickas från en kontroll till en annan. Kontrollen som hanterar gränssnittsinstansen kallas providern, och kontrollen som tar emot gränssnittsinstansen och processer eller visar data kallas konsumenten. Mer information om anslutningar finns i översikten WebPartConnection över klass- och webbdelar.

Konsumentkontrollen i en anslutning kan vara en WebPart kontroll eller någon typ av server eller användarkontroll, men den måste ha en metod som är avsedd som motringningsmetod. Motringningsmetoden anropas under anslutningsprocessen och syftet är att ta emot en gränssnittsinstans som innehåller data från providern. Om du vill ange den metod som fungerar som motringningsmetod i en konsument måste du lägga till ett ConnectionConsumerAttribute metadataelement i metoden (elementet baseras på ConnectionConsumerAttribute klassen).

Förutom att ange återanropsmetoden i en konsument ConnectionConsumerAttribute kan du också ange viss information om en konsuments anslutningspunkt. En konsumentanslutningspunkt är en instans av ConsumerConnectionPoint klassen som kapslar in all information om en konsument som behövs för att upprätta en anslutning, inklusive konsumentens kontrolltyp, om den kan ansluta till flera leverantörer samtidigt, vilken typ av gränssnitt som konsumenten kan ta emot från en leverantör, information om återanropsmetoden och ett visningsnamn som representerar konsumentanslutningspunkten i användargränssnittet (UI). Varje webbdelsanslutning innehåller en konsumentanslutningspunkt som är associerad med konsumentkontrollen.

När du lägger till ConnectionConsumerAttribute metadataelementet i motringningsmetoden i en konsument kan du också använda det för att ange följande information om konsumentanslutningspunkten: ett visningsnamn för anslutningspunkten (mer information finns DisplayName i egenskapen), om konsumenten kan ansluta till flera leverantörer samtidigt (mer information finns i AllowsMultipleConnections egenskapen). ett ID för anslutningspunkten (mer information finns i ID egenskapen) och typen av anslutningspunkt som konsumenten använder (mer information finns i egenskapen ConnectionPointType ). De fyra överlagringarna av konstruktorn för ConnectionConsumerAttribute klassen har parametrar som gör att du kan ange värden för en eller flera av dessa anslutningspunktsegenskaper när en ny instans av klassen skapas. De flesta egenskaper för en konsumentanslutningspunkt kan också anges programmatiskt. det är valfritt att ställa in dem med elementet ConnectionConsumerAttribute .

Note

När du lägger till ConnectionConsumerAttribute metadataelementet i en motringningsmetod i en konsument är den enda obligatoriska parametern som du alltid måste ange parametern displayName (mer information finns i ConnectionConsumerAttribute(String) konstruktorns överlagring). Värdet för den här parametern tilldelas egenskapen DisplayName och när en användare öppnar anslutningsgränssnittet (som skapats av kontrollen) representerar visningsnamnet ConnectionsZone konsumentanslutningspunkten i användargränssnittet. Om du anger flera återanropsmetoder i en konsumentkontroll har du flera möjliga anslutningspunkter att välja mellan, och när du lägger till ConnectionConsumerAttribute metadataelementet i varje återanropsmetod bör du också ange ett värde för parametern id , så att varje konsumentanslutningsplats har en känd unik identifierare.

Konstruktorer

Name Description
ConnectionConsumerAttribute(String, String, Type)

Initierar en ny instans av ConnectionConsumerAttribute klassen, anger ett visningsnamn, ett ID och en specifik typ av anslutningspunktobjekt som ska användas för konsumentanslutningspunkten.

ConnectionConsumerAttribute(String, String)

Initierar en ny instans av ConnectionConsumerAttribute klassen och anger ett visningsnamn och ett ID för konsumentanslutningspunkten.

ConnectionConsumerAttribute(String, Type)

Initierar en ny instans av ConnectionConsumerAttribute klassen och anger ett visningsnamn och en specifik typ av anslutningspunktobjekt som ska användas för konsumentanslutningspunkten.

ConnectionConsumerAttribute(String)

Initierar en ny instans av ConnectionConsumerAttribute klassen och anger ett visningsnamn för konsumentanslutningspunkten.

Egenskaper

Name Description
AllowsMultipleConnections

Hämtar eller anger ett värde som anger om anslutningspunkten tillåter flera anslutningar.

ConnectionPointType

Hämtar anslutningspunktstypen för konsumentanslutningspunkten.

DisplayName

Hämtar det egna namnet på konsumentanslutningspunkten.

DisplayNameValue

Hämtar eller anger strängen som används som värdet DisplayName för egenskapen för användning i lokaliseringsscenarier.

ID

Hämtar en sträng som representerar den unika identiteten för konsumentanslutningspunkten.

TypeId

När den implementeras i en härledd klass hämtar du en unik identifierare för den här Attribute.

(Ärvd från Attribute)

Metoder

Name Description
Equals(Object)

Returnerar ett värde som anger om den här instansen är lika med ett angivet objekt.

(Ärvd från Attribute)
GetHashCode()

Returnerar hash-koden för den här instansen.

(Ärvd från Attribute)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
IsDefaultAttribute()

När den åsidosättas i en härledd klass anger du om värdet för den här instansen är standardvärdet för den härledda klassen.

(Ärvd från Attribute)
Match(Object)

När den åsidosätts i en härledd klass returneras ett värde som anger om den här instansen är lika med ett angivet objekt.

(Ärvd från Attribute)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Explicita gränssnittsimplementeringar

Name Description
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mappar en uppsättning namn till en motsvarande uppsättning av sändningsidentifierare.

(Ärvd från Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Hämtar typinformationen för ett objekt, som kan användas för att hämta typinformationen för ett gränssnitt.

(Ärvd från Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Hämtar antalet typinformationsgränssnitt som ett objekt tillhandahåller (antingen 0 eller 1).

(Ärvd från Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Ger åtkomst till egenskaper och metoder som exponeras av ett objekt.

(Ärvd från Attribute)

Gäller för

Se även