IWebPartRow Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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 SetConnectionInterface
bernama , 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. |