IWebPartRow Rozhraní

Definice

Definuje rozhraní poskytovatele pro propojení dvou serverových ovládacích prvků pomocí jednoho pole dat.Defines a provider interface for connecting two server controls using a single field of data.

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

Příklady

Následující příklad kódu ukazuje, jak vytvořit statické propojení mezi dvěma ovládacími prvky pomocí IWebPartRow rozhraní.The following code example demonstrates how to create a static connection between two controls using the IWebPartRow interface. Příklad kódu má tři části:The code example has three parts:

  • Zdrojový kód pro dva vlastní WebPart ovládací prvky, které mohou vytvořit připojení pomocí IWebPartRow rozhraní, s jedním ovládacím prvkem, který funguje jako zprostředkovatel, a druhý působí jako příjemce.Source code for two custom WebPart controls that can form a connection using the IWebPartRow interface, with one control acting as the provider, and the other acting as the consumer.

  • Webová stránka, která hostuje ovládací prvky a deklaruje statické připojení ve formátu Persistence.A Web page that hosts the controls and declares the static connection in persistence format.

  • Popis toho, co se stane, když se spustí ukázkový kód.A description of what happens when the example code runs.

První část příkladu kódu je zdrojový kód pro dva vlastní ovládací prvky.The first part of the code example is the source code for the two custom controls. První je kód pro poskytovatele, který implementuje IWebPartRow rozhraní.First is the code for the provider, which implements the IWebPartRow interface. Pro jednoduchost v příkladu vytvoří poskytovatel tabulku s některými daty místo připojení k databázi.For simplicity in the example, the provider creates a table with some data rather than connecting to a database. GetConnectionInterfaceMetoda slouží jako bod připojení poskytovatele, metoda zpětného volání, která vrací instanci rozhraní pro příjemce.The GetConnectionInterface method serves as the provider's connection point, the callback method that returns the interface instance to the consumer. Jako u příjemce načte instanci rozhraní od poskytovatele v jeho metodě s názvem SetConnectionInterface , která je označena ConnectionConsumer atributem.As for the consumer, it retrieves the interface instance from the provider in its method named SetConnectionInterface, which is marked with a ConnectionConsumer attribute. Po načtení instance rozhraní volá příjemce ve své OnPreRender metodě implementaci GetRowData metody ve zprostředkovateli pro načtení skutečných dat a jejich zápis na stránku.After retrieving the instance of the interface, the consumer, in its OnPreRender method, calls the implementation of the GetRowData method in the provider, to retrieve the actual data and write it to the page.

Chcete-li spustit příklad kódu, je nutné tento zdrojový kód zkompilovat.For the code example to run, you must compile this source code. Můžete jej zkompilovat explicitně a výsledné sestavení umístit do složky Bin vašeho webu nebo do globální mezipaměti sestavení (GAC).You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. Případně můžete zdrojový kód vložit do složky App_Code webu, kde bude dynamicky zkompilován za běhu.Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. Tento příklad kódu používá dynamickou kompilaci.This code example uses dynamic compilation. Návod, který ukazuje, jak zkompilovat, naleznete v tématu Návod: vývoj a používání vlastního ovládacího prvku webového serveru.For a walkthrough that demonstrates how to compile, see Walkthrough: Developing and Using a Custom Web Server Control.

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 

Druhá část příkladu kódu je webová stránka, která deklaruje statické připojení a hostuje ovládací prvky.The second part of the code example is the Web page that declares the static connection and hosts the controls. V horní části stránky je Register direktiva, která deklaruje obor názvů zdrojového kódu obsaženého v adresáři App_Code.Near the top of the page is a Register directive that declares the namespace of the source code contained in the App_Code directory. Připojení je deklarováno pomocí <asp:webpartconnection> elementu.The connection is declared using an <asp:webpartconnection> element. Vlastní ovládací prvky příjemce a poskytovatele jsou deklarovány v <zonetemplate> elementu v rámci <asp:webpartzone> elementu, který je vyžadován pro připojení (musí být umístěn v rámci zóny, která dědí z WebPartZoneBase třídy).The custom consumer and provider controls are declared in a <zonetemplate> element within an <asp:webpartzone> element, which is required for them to be able to connect (they must reside within a zone that inherits from the WebPartZoneBase class).

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

Načtěte stránku v prohlížeči.Load the page in a browser. Ovládací prvek příjemce zobrazí data poskytnutá ze zadaného řádku, který poskytovatel zpřístupní prostřednictvím instance IWebPartRow rozhraní.The consumer control displays the data provided from the specified row, which the provider makes available through an instance of the IWebPartRow interface.

Poznámky

Toto rozhraní je určené pro použití s Webové části připojení.This interface is designed to be used with Web Parts connections. V připojení Webové části dva serverové ovládací prvky, které se nacházejí v WebPartZoneBase zóně, navážou připojení a sdílejí data s jedním ovládacím prvkem fungujícím jako spotřebitel a druhým ovládacím prvkem, který působí jako poskytovatel.In a Web Parts connection, two server controls that reside in a WebPartZoneBase zone establish a connection and share data, with one control acting as the consumer and the other control acting as a provider. Mechanismus pro sdílení dat ve Webové části připojení je instance rozhraní, kterou zprostředkovatel slouží pro uživatele prostřednictvím metody zpětného volání.The mechanism for sharing data in a Web Parts connection is an interface instance, which the provider serves to the consumer by means of a callback method. Aby bylo možné navázat připojení, musí příjemce a zprostředkovatel pracovat se stejným typem rozhraní pro sdílení dat.To establish a connection, the consumer and provider must both work with the same interface type for sharing data. Pokud příjemce nerozpozná typ rozhraní odesílaného poskytovatelem, je stále možné připojit ovládací prvky pomocí transformátoru ( WebPartTransformer objektu), který přeloží instanci rozhraní odeslanou zprostředkovatelem do typu, který příjemce rozpozná.If the consumer does not recognize the interface type sent by the provider, it is still possible to connect the controls by means of a transformer (a WebPartTransformer object) that translates the interface instance sent by the provider into a type that the consumer recognizes. Podrobnosti o připojeních najdete v WebPartConnection tématu přehled připojení webové části.For details on connections, see WebPartConnection and Web Parts Connections Overview.

IWebPartRowRozhraní je rozhraní poskytovatele, které je součástí sady webové části ovládacího prvku jako standardní rozhraní pro vytváření připojení na základě datového řádku.The IWebPartRow interface is a provider interface included with the Web Parts control set as a standard interface for creating connections based on a data row. Můžete také vytvořit vlastní rozhraní pro použití s Webové části připojení, ale v mnoha webových aplikacích řízených daty je užitečné vytvořit připojení založené na společném poli (podrobnosti najdete v tématu IWebPartField rozhraní), tabulce (podrobnosti viz IWebPartTable rozhraní) nebo řádku ze zdroje dat.You can also create custom interfaces to use with Web Parts connections, but in many data-driven Web applications, it is useful to create connections based on a common field (for details, see the IWebPartField interface), table (for details, see the IWebPartTable interface), or row from the data source. V typickém připojení WebPart ovládací prvek, který funguje jako zprostředkovatel, implementuje IWebPartRow rozhraní a poskytne instanci rozhraní pro příjemce ve speciální metodě zpětného volání.In a typical connection, a WebPart control acting as a provider would implement the IWebPartRow interface and provide an instance of the interface to consumers in a special callback method. Zprostředkovatel může například implementovat IWebPartRow rozhraní pro řádek, který odpovídá uživateli v tabulce informací o uživateli.For example, the provider might implement an IWebPartRow interface for a row that corresponds to a user in your user information table. Jiný WebPart ovládací prvek fungující jako příjemce by definoval speciální metodu pro získání instance rozhraní a mohl by pak extrahovat data uživatelů, používat je k vyhledání dalších informací o účtech tohoto uživatele a zobrazit všechny informace týkající se tohoto uživatele na stránce.Another WebPart control acting as a consumer would define a special method to receive the interface instance, and could then extract the user data, use it to look up additional information about that user's accounts, and display all the information related to that user on the page.

IWebPartRowRozhraní má dva exponované členy.The IWebPartRow interface has two exposed members. SchemaVlastnost vrací informace o schématu o datovém řádku zapouzdřeném v PropertyDescriptorCollection objektu.The Schema property returns schema information about the data row encapsulated in a PropertyDescriptorCollection object. GetRowDataMetoda deklaruje metodu, kterou implementuje implementátor (například ovládací prvek poskytovatele) k načtení dat řádku instance rozhraní, když je vyvolána metoda zpětného volání.The GetRowData method declares a method that an implementer (such as a provider control) uses to retrieve the interface instance's row data when the callback method is invoked.

Vlastnosti

Schema

Získá informace o schématu pro datový řádek, který se používá ke sdílení dat mezi dvěma WebPart ovládacími prvky.Gets the schema information for a data row that is used to share data between two WebPart controls.

Metody

GetRowData(RowCallback)

Vrátí data pro řádek, který je používán rozhraním jako základ připojení mezi dvěma WebPart ovládacími prvky.Returns the data for the row that is being used by the interface as the basis of a connection between two WebPart controls.

Platí pro

Viz také