Bagikan melalui


IWebPartRow Antarmuka

Definisi

Menentukan antarmuka penyedia untuk menyambungkan dua kontrol server menggunakan satu bidang data.

public interface class IWebPartRow
public interface IWebPartRow
type IWebPartRow = interface
Public Interface IWebPartRow

Contoh

Contoh kode berikut menunjukkan cara membuat koneksi statis antara dua kontrol menggunakan IWebPartRow antarmuka . Contoh kode memiliki tiga bagian:

  • Kode sumber untuk dua kontrol kustom WebPart yang dapat membentuk koneksi menggunakan IWebPartRow antarmuka, dengan satu kontrol bertindak sebagai penyedia, dan yang lainnya bertindak sebagai konsumen.

  • Halaman Web yang menghosting kontrol dan mendeklarasikan koneksi statis dalam format persistensi.

  • Deskripsi tentang apa yang terjadi ketika kode contoh berjalan.

Bagian pertama dari contoh kode adalah kode sumber untuk dua kontrol kustom. Pertama adalah kode untuk penyedia, yang mengimplementasikan IWebPartRow antarmuka. Untuk kesederhanaan dalam contoh, penyedia membuat tabel dengan beberapa data daripada menyambungkan ke database. Metode ini GetConnectionInterface berfungsi sebagai titik koneksi penyedia, metode panggilan balik yang mengembalikan instans antarmuka kepada konsumen. Adapun konsumen, ia mengambil instans antarmuka dari penyedia dalam metode SetConnectionInterfacebernama , yang ditandai dengan ConnectionConsumer atribut . Setelah mengambil instans antarmuka, konsumen, dalam metodenya OnPreRender , memanggil implementasi GetRowData metode di penyedia, untuk mengambil data aktual dan menulisnya ke halaman.

Agar contoh kode berjalan, Anda harus mengkompilasi kode sumber ini. Anda dapat mengkompilasinya secara eksplisit dan meletakkan rakitan yang dihasilkan di folder Bin situs Web Anda atau cache perakitan global. Atau, Anda dapat meletakkan kode sumber di folder App_Code situs Anda, di mana kode tersebut akan dikompilasi secara dinamis pada durasi. Contoh kode ini menggunakan kompilasi dinamis. Untuk panduan yang menunjukkan cara mengkompilasi, lihat Panduan: Mengembangkan dan Menggunakan Kontrol Server Web Kustom.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Samples.AspNet.CS.Controls 
{
  // This sample code creates a Web Parts control that acts as a provider 
  // of row data.
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  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);
        }
  } // RowProviderWebPart

  // This sample code creates a Web Parts control that acts as a consumer 
  // of row data.
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]  
  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;
    }
  } // RowConsumerWebPart
} // Samples.AspNet.CS.Controls
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Reflection
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  ' This sample code creates a Web Parts control that acts as a provider 
  ' of row data.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  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 _
      ComponentModel.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


  ' This sample code creates a Web Parts control that acts as a consumer 
  ' of row data.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  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(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

End Namespace  ' Samples.AspNet.VB.Controls

Bagian kedua dari contoh kode adalah halaman Web yang mendeklarasikan koneksi statis dan menghosting kontrol. Di dekat bagian atas halaman adalah Register direktif yang mendeklarasikan namespace kode sumber yang terkandung dalam direktori App_Code. Koneksi dinyatakan menggunakan <asp:webpartconnection> elemen . Kontrol konsumen dan penyedia kustom dideklarasikan dalam elemen <asp:webpartzone> dalam <zonetemplate> elemen , yang diperlukan agar mereka dapat terhubung (mereka harus berada di dalam zona yang mewarisi dari WebPartZoneBase kelas).

<%@ page language="C#" %>
<%@ Register tagprefix="IRow" 
    Namespace="Samples.AspNet.CS.Controls" %>

<!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>
      <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>
            <irow:RowProviderWebPart ID="provider1" runat="server" 
              Title="Row Provider Control" />
            <irow:RowConsumerWebPart ID="consumer1" runat="server" 
              Title="Row Consumer Control" />
          </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>
<%@ page language="VB" %>
<%@ Register tagprefix="IRow" 
    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">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>IRow Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <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>
            <irow:RowProviderWebPart ID="provider1" runat="server" 
              Title="Row Provider Control" />
            <irow:RowConsumerWebPart ID="consumer1" runat="server" 
              Title="Row Consumer Control" />
          </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>

Muat halaman di browser. Kontrol konsumen menampilkan data yang disediakan dari baris yang ditentukan, yang disediakan penyedia melalui instans IWebPartRow antarmuka.

Keterangan

Antarmuka ini dirancang untuk digunakan dengan koneksi Bagian Web. Dalam koneksi Bagian Web, dua kontrol server yang berada di WebPartZoneBase zona membuat koneksi dan berbagi data, dengan satu kontrol bertindak sebagai konsumen dan kontrol lainnya yang bertindak sebagai penyedia. Mekanisme untuk berbagi data dalam koneksi Bagian Web adalah instans antarmuka, yang dilayani penyedia kepada konsumen dengan metode panggilan balik. Untuk membuat koneksi, konsumen dan penyedia harus bekerja dengan jenis antarmuka yang sama untuk berbagi data. Jika konsumen tidak mengenali jenis antarmuka yang dikirim oleh penyedia, masih mungkin untuk menghubungkan kontrol melalui transformator ( WebPartTransformer objek) yang menerjemahkan instans antarmuka yang dikirim oleh penyedia ke dalam jenis yang dikenali konsumen. Untuk detail tentang koneksi, lihat WebPartConnection dan Gambaran Umum Koneksi Bagian Web.

Antarmuka IWebPartRow adalah antarmuka penyedia yang disertakan dengan kontrol Komponen Web yang ditetapkan sebagai antarmuka standar untuk membuat koneksi berdasarkan baris data. Anda juga dapat membuat antarmuka kustom untuk digunakan dengan koneksi Bagian Web, tetapi di banyak aplikasi Web berbasis data, berguna untuk membuat koneksi berdasarkan bidang umum (untuk detailnya, lihat IWebPartField antarmuka), tabel (untuk detailnya, lihat IWebPartTable antarmuka), atau baris dari sumber data. Dalam koneksi umum, kontrol yang WebPart bertindak sebagai penyedia akan mengimplementasikan IWebPartRow antarmuka dan menyediakan instans antarmuka kepada konsumen dalam metode panggilan balik khusus. Misalnya, penyedia mungkin mengimplementasikan IWebPartRow antarmuka untuk baris yang sesuai dengan pengguna dalam tabel informasi pengguna Anda. Kontrol lain WebPart yang bertindak sebagai konsumen akan menentukan metode khusus untuk menerima instans antarmuka, dan kemudian dapat mengekstrak data pengguna, menggunakannya untuk mencari informasi tambahan tentang akun pengguna tersebut, dan menampilkan semua informasi yang terkait dengan pengguna tersebut di halaman.

Antarmuka IWebPartRow memiliki dua anggota yang diekspos. Properti Schema mengembalikan informasi skema tentang baris data yang dienkapsulasi dalam PropertyDescriptorCollection objek. Metode ini GetRowData menyatakan metode yang digunakan pelaksana (seperti kontrol penyedia) untuk mengambil data baris instans antarmuka saat metode panggilan balik dipanggil.

Properti

Schema

Mendapatkan informasi skema untuk baris data yang digunakan untuk berbagi data di antara dua WebPart kontrol.

Metode

GetRowData(RowCallback)

Mengembalikan data untuk baris yang sedang digunakan oleh antarmuka sebagai dasar koneksi antara dua WebPart kontrol.

Berlaku untuk

Lihat juga