ProviderConnectionPoint Konstruktor
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Initierar en ny instans av ProviderConnectionPoint klassen.
public:
ProviderConnectionPoint(System::Reflection::MethodInfo ^ callbackMethod, Type ^ interfaceType, Type ^ controlType, System::String ^ displayName, System::String ^ id, bool allowsMultipleConnections);
public ProviderConnectionPoint(System.Reflection.MethodInfo callbackMethod, Type interfaceType, Type controlType, string displayName, string id, bool allowsMultipleConnections);
new System.Web.UI.WebControls.WebParts.ProviderConnectionPoint : System.Reflection.MethodInfo * Type * Type * string * string * bool -> System.Web.UI.WebControls.WebParts.ProviderConnectionPoint
Public Sub New (callbackMethod As MethodInfo, interfaceType As Type, controlType As Type, displayName As String, id As String, allowsMultipleConnections As Boolean)
Parametrar
- callbackMethod
- MethodInfo
Metoden i providerkontrollen som returnerar en gränssnittsinstans till konsumenter för att upprätta en anslutning.
- displayName
- String
Ett eget visningsnamn för provideranslutningspunkten som visas för användare i anslutningsanvändargränssnittet (UI).
- id
- String
En unik identifierare för provideranslutningspunkten.
- allowsMultipleConnections
- Boolean
Ett booleskt värde som anger om provideranslutningspunkten kan ha flera samtidiga anslutningar med konsumenter.
Undantag
callbackMethod är null.
-eller-
interfaceType är null.
-eller-
controlType är null.
-eller-
displayName är null eller en tom sträng ("").
controlType är inte samma typ som providerkontrollen (eller en giltig klass som härleds från den).
Exempel
Följande kodexempel visar hur du härleder från ProviderConnectionPoint klassen för att skapa en anpassad provideranslutningspunkt.
Kodexemplet har tre delar:
En källfil som innehåller en providerkontroll WebPart , en konsumentkontroll WebPart och ett anpassat ProviderConnectionPoint objekt.
En webbsida som är värd för kontrollerna i en statisk anslutning.
En förklaring av hur du kör exempelkoden.
Den första delen av kodexemplet är källan för provider- och konsumentkontrollerna WebPart och en anpassad ProviderConnectionPoint klass med namnet TableProviderConnectionPoint. Observera att konstruktorn för TableProviderConnectionPoint klassen anropar baskonstruktorn och skickar de obligatoriska parametrarna som anges i avsnittet Parametrar. Observera också att i TableProviderWebPart klassen GetConnectionInterface anges metoden som återanropsmetod för anslutningar, och ConnectionProvider attributet deklarerar det anpassade TableProviderConnectionPoint som en parameter. Detta visar hur du skapar en anpassad provideranslutningspunkt och sedan associerar den med en providerkontroll. Det här exemplet förutsätter att källkoden kompileras dynamiskt, så du bör placera källkodsfilen i en App_Code undermapp i webbprogrammet.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Web;
using System.Web.UI;
using System.Security.Permissions;
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 table data.
namespace Samples.AspNet.CS.Controls
{
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class TableProviderWebPart : WebPart, IWebPartTable
{
DataTable _table;
public TableProviderWebPart()
{
_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);
}
public PropertyDescriptorCollection Schema
{
get
{
return TypeDescriptor.GetProperties(_table.DefaultView[0]);
}
}
public void GetTableData(TableCallback callback)
{
callback(_table.Rows);
}
public bool ConnectionPointEnabled
{
get
{
object o = ViewState["ConnectionPointEnabled"];
return (o != null) ? (bool)o : true;
}
set
{
ViewState["ConnectionPointEnabled"] = value;
}
}
[ConnectionProvider("Table", typeof(TableProviderConnectionPoint), AllowsMultipleConnections = true)]
public IWebPartTable GetConnectionInterface()
{
return new TableProviderWebPart();
}
public class TableProviderConnectionPoint : ProviderConnectionPoint
{
public TableProviderConnectionPoint(MethodInfo callbackMethod, Type interfaceType, Type controlType,
string name, string id, bool allowsMultipleConnections) : base(
callbackMethod, interfaceType, controlType,
name, id, allowsMultipleConnections)
{
}
public override bool GetEnabled(Control control)
{
return ((TableProviderWebPart)control).ConnectionPointEnabled;
}
}
}
// This code sample demonstrates a custom WebPart controls that acts as
// a consumer in a Web Parts connection.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class TableConsumer : WebPart
{
private IWebPartTable _provider;
private ICollection _tableData;
private void GetTableData(object tableData)
{
_tableData = (ICollection)tableData;
}
protected override void OnPreRender(EventArgs e)
{
if (_provider != null)
{
_provider.GetTableData(new TableCallback(GetTableData));
}
}
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("Table")]
public void SetConnectionInterface(IWebPartTable provider)
{
_provider = provider;
}
public class TableConsumerConnectionPoint : ConsumerConnectionPoint
{
public TableConsumerConnectionPoint(MethodInfo callbackMethod, Type interfaceType, Type controlType,
string name, string id, bool allowsMultipleConnections)
: base(
callbackMethod, interfaceType, controlType,
name, id, allowsMultipleConnections)
{
}
}
}
}
Den andra delen av kodexemplet är webbsidan som är värd för de anpassade kontrollerna i en statisk webbdelsanslutning. Överst på sidan finns ett Register direktiv om att deklarera ett prefix och namnområdet för de anpassade kontrollerna. Anslutningen deklareras med hjälp av ett <asp:webpartconnection> element och provider- och konsumentkontrollerna deklareras inom ett <asp:webpartzone> element.
<%@ page language="C#" %>
<%@ register tagprefix="aspSample"
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>IField 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>
<aspSample:TableProviderWebPart ID="provider1" runat="server"
ToolTip="Web Parts Table Provider Control" />
<aspSample:TableConsumer ID="consumer1" runat="server"
ToolTip="Web Parts Table Consumer Control"/>
</zoneTemplate>
</asp:webpartzone>
</div>
</form>
</body>
</html>
Läs in sidan i en webbläsare. Anslutningen mellan kontrollerna finns redan och konsumenten visar data från providern eftersom anslutningen deklarerades som en statisk anslutning på sidan.
Kommentarer
Konstruktorn ProviderConnectionPoint för ProviderConnectionPoint klassen anropar helt enkelt baskonstruktorn, skickar till den de olika parametrarna och initierar basklassen.
Basklasskonstruktorn kontrollerar ett antal parametrar för en anslutningspunkt och kan utlösa flera undantag. En lista över möjliga undantag finns i avsnittet Undantag.
Du kan anropa ProviderConnectionPoint konstruktorn för att skapa en egen instans av ProviderConnectionPoint klassen. Men om du bara upprättar en anslutning och inte utökar klassen bör du anropa GetProviderConnectionPoints metoden för att returnera ett befintligt anslutningspunktsobjekt från en provider.