Bagikan melalui


ConnectionConsumerAttribute Kelas

Definisi

Mengidentifikasi metode panggilan balik dalam kontrol server yang bertindak sebagai konsumen dalam koneksi Bagian Web, dan memungkinkan pengembang untuk menentukan detail tentang titik koneksi konsumen.

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
Warisan
ConnectionConsumerAttribute
Atribut

Contoh

Contoh kode berikut menunjukkan penggunaan ConnectionConsumerAttribute kelas , dengan menunjukkan cara mendeklarasikan ConnectionConsumerAttribute elemen metadata pada metode panggilan balik dalam kontrol konsumen. Perhatikan bahwa kelebihan beban paling sederhana dari konstruktor digunakan; displayName hanya nilai parameter yang disediakan.

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

    End Sub
End Class

Contoh kode berikut menunjukkan cara membuat koneksi statis dasar antara dua kontrol Bagian Web menggunakan WebPartConnection kelas . File kode penyedia dan konsumen harus dimasukkan ke dalam folder App_Code di bawah folder aplikasi yang berisi halaman .aspx.

Contoh pertama menunjukkan kelas yang bertindak sebagai penyedia.

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

Contoh kedua menunjukkan kelas yang bertindak sebagai konsumen. Perhatikan bahwa metode ditetapkan sebagai metode panggilan balik dengan ConnectionConsumerAttribute elemen metadata.

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

Contoh akhir menunjukkan halaman ASP.NET yang berisi dua kontrol.

<%@ 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>

Keterangan

Koneksi Bagian Web terdiri dari dua kontrol server yang berada di WebPartZoneBase zona dan berbagi data melalui instans antarmuka yang diteruskan dari satu kontrol ke kontrol lainnya. Kontrol yang melayani instans antarmuka disebut penyedia, dan kontrol yang menerima instans antarmuka dan memproses atau menampilkan data disebut konsumen. Untuk detail tentang koneksi, lihat WebPartConnectionKelas dan Gambaran Umum Koneksi Bagian Web.

Kontrol konsumen dalam koneksi dapat menjadi WebPart kontrol atau jenis server atau kontrol pengguna apa pun, tetapi harus memiliki metode yang ditetapkan sebagai metode panggilan balik. Metode panggilan balik dipanggil selama proses koneksi, dan tujuannya adalah untuk menerima dari penyedia instans antarmuka yang berisi data. Untuk menunjuk metode yang berfungsi sebagai metode panggilan balik dalam konsumen, Anda harus menambahkan ConnectionConsumerAttribute elemen metadata ke metode (elemen didasarkan pada ConnectionConsumerAttribute kelas ).

Selain menunjuk metode panggilan balik di konsumen, ConnectionConsumerAttribute objek juga memungkinkan Anda menentukan detail tertentu tentang titik koneksi konsumen. Titik koneksi konsumen adalah instans ConsumerConnectionPoint kelas yang merangkum semua detail tentang konsumen yang diperlukan untuk membuat koneksi, termasuk jenis kontrol konsumen, apakah dapat terhubung ke beberapa penyedia pada saat yang sama, jenis antarmuka apa yang dapat diterima konsumen dari penyedia, detail tentang metode panggilan balik, dan nama tampilan yang mewakili titik koneksi konsumen di antarmuka pengguna (UI). Setiap koneksi Bagian Web menyertakan titik koneksi konsumen yang terkait dengan kontrol konsumen.

Saat Anda menambahkan ConnectionConsumerAttribute elemen metadata ke metode panggilan balik di konsumen, Anda juga dapat menggunakannya untuk menentukan detail berikut tentang titik koneksi konsumen: nama tampilan untuk titik koneksi (untuk detailnya, lihat DisplayName properti ), apakah konsumen dapat terhubung ke beberapa penyedia secara bersamaan (untuk detailnya, lihat AllowsMultipleConnections properti ), ID untuk titik koneksi (untuk detailnya, lihat ID properti ), dan jenis titik koneksi yang digunakan konsumen (untuk detailnya, lihat ConnectionPointType properti ). Empat kelebihan beban konstruktor untuk ConnectionConsumerAttribute kelas masing-masing memiliki parameter yang memungkinkan Anda menentukan nilai untuk satu atau beberapa properti titik koneksi ini saat instans baru kelas dibuat. Sebagian besar properti untuk titik koneksi konsumen juga dapat diatur secara terprogram; mengaturnya menggunakan ConnectionConsumerAttribute elemen bersifat opsional.

Catatan

Saat Anda menambahkan ConnectionConsumerAttribute elemen metadata ke metode panggilan balik di konsumen, satu-satunya parameter yang diperlukan yang harus selalu Anda tentukan adalah displayName parameter (untuk detailnya, lihat ConnectionConsumerAttribute(String) overload konstruktor). Nilai parameter ini ditetapkan ke DisplayName properti , dan ketika pengguna membuka antarmuka pengguna koneksi (dibuat oleh ConnectionsZone kontrol), nama tampilan mewakili titik koneksi konsumen di UI. Jika Anda menunjuk beberapa metode panggilan balik dalam kontrol konsumen, Anda akan memiliki beberapa titik koneksi yang mungkin untuk dipilih, dan ketika Anda menambahkan ConnectionConsumerAttribute elemen metadata ke setiap metode panggilan balik, Anda juga harus menentukan nilai untuk id parameter, sehingga setiap titik koneksi konsumen memiliki pengidentifikasi unik yang diketahui.

Konstruktor

ConnectionConsumerAttribute(String)

Menginisialisasi instans ConnectionConsumerAttribute baru kelas , menentukan nama tampilan untuk titik koneksi konsumen.

ConnectionConsumerAttribute(String, String)

Menginisialisasi instans ConnectionConsumerAttribute baru kelas, menentukan nama tampilan dan ID untuk titik koneksi konsumen.

ConnectionConsumerAttribute(String, String, Type)

Menginisialisasi instans ConnectionConsumerAttribute baru kelas, menentukan nama tampilan, ID, dan jenis objek titik koneksi tertentu yang akan digunakan untuk titik koneksi konsumen.

ConnectionConsumerAttribute(String, Type)

Menginisialisasi instans ConnectionConsumerAttribute baru kelas , menentukan nama tampilan dan jenis objek titik koneksi tertentu yang akan digunakan untuk titik koneksi konsumen.

Properti

AllowsMultipleConnections

Mendapatkan atau menetapkan nilai yang menunjukkan apakah titik koneksi memungkinkan beberapa koneksi.

ConnectionPointType

Mendapatkan jenis titik koneksi titik koneksi konsumen.

DisplayName

Mendapatkan nama yang mudah diingat dari titik koneksi konsumen.

DisplayNameValue

Mendapatkan atau mengatur string yang digunakan sebagai nilai DisplayName properti, untuk digunakan dalam skenario pelokalan.

ID

Mendapatkan string yang mewakili identitas unik titik koneksi konsumen.

TypeId

Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute.

(Diperoleh dari Attribute)

Metode

Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
GetHashCode()

Mengembalikan kode hash untuk instans ini.

(Diperoleh dari Attribute)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
IsDefaultAttribute()

Ketika ditimpa di kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan.

(Diperoleh dari Attribute)
Match(Object)

Saat ditimpa di kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

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

Memetakan sekumpulan nama ke sekumpulan pengidentifikasi pengiriman yang sesuai.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Mengambil informasi jenis untuk objek, yang dapat digunakan untuk mendapatkan informasi jenis untuk antarmuka.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Mengambil jumlah antarmuka informasi jenis yang disediakan objek (baik 0 atau 1).

(Diperoleh dari Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Menyediakan akses ke properti dan metode yang diekspos oleh objek.

(Diperoleh dari Attribute)

Berlaku untuk

Lihat juga