ConnectionConsumerAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Identyfikuje metodę wywołania zwrotnego w kontrolce serwera działającej jako użytkownik w połączeniu składników Web Part i umożliwia deweloperom określenie szczegółów dotyczących punktu połączenia użytkownika.
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
- Dziedziczenie
- Atrybuty
Przykłady
Poniższy przykład kodu pokazuje użycie ConnectionConsumerAttribute klasy , pokazując, jak zadeklarować ConnectionConsumerAttribute
element metadanych w metodzie wywołania zwrotnego w kontrolce konsumenta. Należy pamiętać, że jest używane najprostsze przeciążenie konstruktora; zostanie podana tylko wartość parametru displayName
.
[ConnectionConsumer("Row")]
public void SetConnectionInterface(IWebPartRow provider)
{
_provider = provider;
}
<ConnectionConsumer("Row")> _
Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
_provider = provider
End Sub
End Class
W poniższych przykładach kodu pokazano, jak utworzyć podstawowe, statyczne połączenie między dwoma kontrolkami składników Web Part przy użyciu WebPartConnection klasy . Pliki kodu dostawcy i odbiorcy powinny zostać umieszczone w folderze App_Code w folderze aplikacji zawierającym stronę .aspx.
Pierwszy przykład przedstawia klasę działającą jako dostawca.
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
W drugim przykładzie pokazano klasę działającą jako odbiorca. Zwróć uwagę, że metoda jest wyznaczona jako metoda wywołania zwrotnego z elementem ConnectionConsumerAttribute
metadanych.
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
W ostatnim przykładzie pokazano stronę ASP.NET zawierającą dwie kontrolki.
<%@ 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>
Uwagi
Połączenie składników Web Part składa się z dwóch kontrolek serwera znajdujących się w WebPartZoneBase strefie i udostępniania danych za pomocą wystąpienia interfejsu przekazywanego z jednej kontrolki do drugiej. Kontrolka, która obsługuje wystąpienie interfejsu, jest nazywana dostawcą, a kontrolka, która odbiera wystąpienie interfejsu i przetwarza lub wyświetla dane, jest nazywana odbiorcą. Aby uzyskać szczegółowe informacje na temat połączeń, zobacz WebPartConnection omówienie klas i połączeń składników Web Part.
Kontrolka konsumenta w połączeniu może być kontrolką WebPart lub dowolnym typem serwera lub kontrolki użytkownika, ale musi mieć metodę wyznaczoną jako metodę wywołania zwrotnego. Metoda wywołania zwrotnego jest wywoływana podczas procesu połączenia, a jej celem jest odbieranie od dostawcy wystąpienia interfejsu zawierającego dane. Aby wyznaczyć metodę, która służy jako metoda wywołania zwrotnego w odbiorcy, należy dodać ConnectionConsumerAttribute
element metadanych do metody (element jest oparty na ConnectionConsumerAttribute klasie).
Oprócz wyznaczenia metody wywołania zwrotnego w odbiorcy ConnectionConsumerAttribute obiekt umożliwia również określenie pewnych szczegółów dotyczących punktu połączenia użytkownika. Punkt połączenia klienta jest wystąpieniem ConsumerConnectionPoint klasy, która hermetyzuje wszystkie szczegóły dotyczące konsumenta potrzebnego do nawiązania połączenia, w tym typu kontrolki konsumenta, czy może łączyć się z wieloma dostawcami w tym samym czasie, jaki typ interfejsu odbiorca może odbierać od dostawcy, szczegółowe informacje o metodzie wywołania zwrotnego i nazwa wyświetlana reprezentująca punkt połączenia użytkownika w interfejsie użytkownika. Każde połączenie składników Web Part zawiera punkt połączenia użytkownika skojarzony z kontrolką konsumenta.
Po dodaniu ConnectionConsumerAttribute
elementu metadanych do metody wywołania zwrotnego w odbiorcy można również użyć go do określenia następujących szczegółów dotyczących punktu połączenia odbiorcy: nazwy wyświetlanej punktu połączenia (aby uzyskać szczegółowe informacje, zobacz DisplayName właściwość), czy użytkownik może połączyć się z wieloma dostawcami w tym samym czasie (aby uzyskać szczegółowe informacje, zobacz AllowsMultipleConnections właściwość), identyfikator punktu połączenia (aby uzyskać szczegółowe informacje, zobacz ID właściwość) i typ punktu połączenia używanego przez użytkownika (aby uzyskać szczegółowe informacje, zobacz ConnectionPointType właściwość ). Cztery przeciążenia konstruktora dla ConnectionConsumerAttribute klasy mają parametry, które umożliwiają określenie wartości dla co najmniej jednej z tych właściwości punktu połączenia podczas tworzenia nowego wystąpienia klasy. Większość właściwości punktu połączenia użytkownika można również ustawić programowo; ustawienie ich przy użyciu ConnectionConsumerAttribute
elementu jest opcjonalne.
Uwaga
Po dodaniu ConnectionConsumerAttribute
elementu metadanych do metody wywołania zwrotnego w odbiorcy jedynym wymaganym parametrem, który należy zawsze określić, jest displayName
parametr (aby uzyskać szczegółowe informacje, zobacz przeciążenie konstruktora ConnectionConsumerAttribute(String) ). Wartość tego parametru DisplayName jest przypisywana do właściwości, a gdy użytkownik otworzy interfejs użytkownika połączenia (utworzony przez kontrolkę ConnectionsZone ), nazwa wyświetlana reprezentuje punkt połączenia użytkownika w interfejsie użytkownika. Jeśli wyznaczysz wiele metod wywołania zwrotnego w kontrolce odbiorcy, będziesz mieć wiele możliwych punktów połączenia do wyboru, a po dodaniu ConnectionConsumerAttribute
elementu metadanych do każdej metody wywołania zwrotnego należy również określić wartość parametru id
, aby każdy punkt połączenia odbiorcy miał znany, unikatowy identyfikator.
Konstruktory
ConnectionConsumerAttribute(String) |
Inicjuje ConnectionConsumerAttribute nowe wystąpienie klasy, określając nazwę wyświetlaną punktu połączenia odbiorcy. |
ConnectionConsumerAttribute(String, String) |
Inicjuje ConnectionConsumerAttribute nowe wystąpienie klasy, określając nazwę wyświetlaną i identyfikator punktu połączenia odbiorcy. |
ConnectionConsumerAttribute(String, String, Type) |
Inicjuje ConnectionConsumerAttribute nowe wystąpienie klasy, określając nazwę wyświetlaną, identyfikator i określony typ obiektu punktu połączenia do użycia dla punktu połączenia odbiorcy. |
ConnectionConsumerAttribute(String, Type) |
Inicjuje ConnectionConsumerAttribute nowe wystąpienie klasy, określając nazwę wyświetlaną i określony typ obiektu punktu połączenia do użycia dla punktu połączenia odbiorcy. |
Właściwości
AllowsMultipleConnections |
Pobiera lub ustawia wartość wskazującą, czy punkt połączenia zezwala na wiele połączeń. |
ConnectionPointType |
Pobiera typ punktu połączenia odbiorcy. |
DisplayName |
Pobiera przyjazną nazwę punktu połączenia użytkownika. |
DisplayNameValue |
Pobiera lub ustawia ciąg używany jako wartość DisplayName właściwości do użycia w scenariuszach lokalizacji. |
ID |
Pobiera parametry reprezentujące unikatową tożsamość punktu połączenia odbiorcy. |
TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu . (Odziedziczone po Attribute) |
Metody
Equals(Object) |
Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi. (Odziedziczone po Attribute) |
GetHashCode() |
Zwraca wartość skrótu dla tego wystąpienia. (Odziedziczone po Attribute) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
IsDefaultAttribute() |
Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej. (Odziedziczone po Attribute) |
Match(Object) |
Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania. (Odziedziczone po Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Pobiera informacje o typie dla obiektu, który może służyć do pobierania informacji o typie dla interfejsu. (Odziedziczone po Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1). (Odziedziczone po Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt. (Odziedziczone po Attribute) |