Udostępnij za pośrednictwem


IWebPartRow Interfejs

Definicja

Definiuje interfejs dostawcy do łączenia dwóch kontrolek serwera przy użyciu jednego pola danych.

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

Przykłady

W poniższym przykładzie kodu pokazano, jak utworzyć połączenie statyczne między dwoma kontrolkami przy użyciu interfejsu IWebPartRow . Przykładowy kod ma trzy części:

  • Kod źródłowy dwóch kontrolek niestandardowych WebPart , które mogą utworzyć połączenie przy użyciu interfejsu IWebPartRow , z jedną kontrolką działającą jako dostawca, a drugą działającą jako odbiorca.

  • Strona sieci Web, która hostuje kontrolki i deklaruje połączenie statyczne w formacie trwałości.

  • Opis tego, co się stanie po uruchomieniu przykładowego kodu.

Pierwszą częścią przykładu kodu jest kod źródłowy dla dwóch kontrolek niestandardowych. Najpierw jest to kod dostawcy, który implementuje IWebPartRow interfejs. Dla uproszczenia w tym przykładzie dostawca tworzy tabelę z niektórymi danymi zamiast łączyć się z bazą danych. Metoda GetConnectionInterface służy jako punkt połączenia dostawcy, metoda wywołania zwrotnego, która zwraca wystąpienie interfejsu do odbiorcy. Jeśli chodzi o konsumenta, pobiera wystąpienie interfejsu z dostawcy w swojej metodzie o nazwie SetConnectionInterface, która jest oznaczona atrybutem ConnectionConsumer . Po pobraniu wystąpienia interfejsu odbiorca w swojej OnPreRender metodzie wywołuje implementację GetRowData metody w dostawcy, aby pobrać rzeczywiste dane i zapisać je na stronie.

Aby przykład kodu został uruchomiony, należy skompilować ten kod źródłowy. Można je jawnie skompilować i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Możesz też umieścić kod źródłowy w folderze App_Code witryny, w którym będzie dynamicznie kompilowany w czasie wykonywania. W tym przykładzie kodu jest używana kompilacja dynamiczna. Aby zapoznać się z przewodnikiem, który pokazuje, jak skompilować, zobacz Przewodnik: opracowywanie i używanie niestandardowej kontrolki serwera sieci Web.

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

Drugą częścią przykładu kodu jest strona sieci Web, która deklaruje połączenie statyczne i hostuje kontrolki. W górnej części strony znajduje Register się dyrektywa, która deklaruje przestrzeń nazw kodu źródłowego zawartego w katalogu App_Code. Połączenie jest deklarowane przy użyciu <asp:webpartconnection> elementu. Kontrolki niestandardowego <zonetemplate> konsumenta i dostawcy są deklarowane w elemecie w <asp:webpartzone> elemecie, który jest wymagany do nawiązania połączenia (muszą znajdować się w strefie dziedziczonej WebPartZoneBase z klasy).

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

Załaduj stronę w przeglądarce. Kontrolka konsumenta wyświetla dane podane z określonego wiersza, które dostawca udostępnia za pośrednictwem wystąpienia interfejsu IWebPartRow .

Uwagi

Ten interfejs jest przeznaczony do użycia z połączeniami składników Web Part. W połączeniu składników Web Part dwa kontrolki serwera znajdujące się w WebPartZoneBase strefie ustanawiają połączenie i udostępniają dane, z jedną kontrolką działającą jako odbiorca i drugą kontrolką działającą jako dostawca. Mechanizm udostępniania danych w połączeniu składników Web Part jest wystąpieniem interfejsu, które dostawca służy użytkownikowi za pomocą metody wywołania zwrotnego. Aby nawiązać połączenie, użytkownik i dostawca muszą pracować z tym samym typem interfejsu w celu udostępniania danych. Jeśli użytkownik nie rozpoznaje typu interfejsu wysyłanego przez dostawcę, nadal można połączyć kontrolki za pomocą transformatora ( WebPartTransformer obiektu), który tłumaczy wystąpienie interfejsu wysyłane przez dostawcę na typ rozpoznawany przez konsumenta. Aby uzyskać szczegółowe informacje na temat połączeń, zobacz WebPartConnectionOmówienie połączeń składników Web Part.

Interfejs IWebPartRow jest interfejsem dostawcy dołączonym do kontrolki składników Web Part ustawionym jako standardowy interfejs do tworzenia połączeń na podstawie wiersza danych. Można również tworzyć interfejsy niestandardowe do użycia z połączeniami składników Web Part, ale w wielu aplikacjach internetowych opartych na danych warto tworzyć połączenia na podstawie wspólnego pola (aby uzyskać szczegółowe informacje, zobacz interfejs), tabelę (aby uzyskać szczegółowe informacje, zobacz IWebPartFieldIWebPartTable interfejs) lub wiersz ze źródła danych. W typowym połączeniu WebPart kontrolka działająca jako dostawca implementuje IWebPartRow interfejs i udostępnia wystąpienie interfejsu użytkownikom w specjalnej metodzie wywołania zwrotnego. Na przykład dostawca może zaimplementować IWebPartRow interfejs dla wiersza odpowiadającego użytkownikowi w tabeli informacji o użytkowniku. Inna WebPart kontrolka działająca jako użytkownik definiuje specjalną metodę odbierania wystąpienia interfejsu, a następnie może wyodrębnić dane użytkownika, użyć jej do wyszukania dodatkowych informacji o kontach tego użytkownika i wyświetlić wszystkie informacje związane z tym użytkownikiem na stronie.

Interfejs IWebPartRow ma dwa uwidocznione elementy członkowskie. Właściwość Schema zwraca informacje o schemacie dotyczące wiersza danych hermetyzowanego PropertyDescriptorCollection w obiekcie. Metoda GetRowData deklaruje metodę, która implementator (np. kontrolka dostawcy) używa do pobierania danych wiersza wystąpienia interfejsu po wywołaniu metody wywołania zwrotnego.

Właściwości

Schema

Pobiera informacje o schemacie dla wiersza danych używanego do udostępniania danych między dwiema WebPart kontrolkami.

Metody

GetRowData(RowCallback)

Zwraca dane dla wiersza używanego przez interfejs jako podstawę połączenia między dwoma WebPart kontrolkami.

Dotyczy

Zobacz też