CatalogPartCollection Klasse

Definition

Enthält eine Auflistung von CatalogPartSteuerelementen, mit der Kataloge von Webserversteuerelementen bereitgestellt werden, die Endbenutzer zu einer Webseite hinzufügen können. Diese Klasse kann nicht vererbt werden.

public ref class CatalogPartCollection sealed : System::Collections::ReadOnlyCollectionBase
public sealed class CatalogPartCollection : System.Collections.ReadOnlyCollectionBase
type CatalogPartCollection = class
    inherit ReadOnlyCollectionBase
Public NotInheritable Class CatalogPartCollection
Inherits ReadOnlyCollectionBase
Vererbung
CatalogPartCollection

Beispiele

Im folgenden Codebeispiel werden mehrere Verwendungen der CatalogPartCollection Klasse veranschaulicht. Es gibt vier Teile für dieses Codebeispiel:

  • Ein Benutzersteuerelement, mit dem Sie Anzeigemodi auf einer Webparts Seite ändern können.

  • Eine Klasse für ein benutzerdefiniertes WebPart Steuerelement namens TextDisplayWebPart, auf das auf die Webseite verwiesen wird und in einem der CatalogPart Steuerelemente enthalten ist.

  • Eine Webseite, die auf das TextDisplayWebPart Steuerelement verweist, enthält ein Steuerelement mit zwei der CatalogPart Steuerelemente aus dem Webparts Steuerelementsatz, der in der Zone deklariert ist, und enthält ereignisgesteuerten Code, um ein CatalogZone CatalogPartCollection Objekt zu erstellen und zu bearbeiten.

  • Eine Erklärung darüber, wie das Codebeispiel funktioniert, wenn Sie es in einem Browser laden.

Der erste Teil des Codebeispiels ist das Benutzersteuerelement. Der Quellcode für das Benutzersteuerelement stammt aus einem anderen Thema. Für dieses Codebeispiel müssen Sie die ASCX-Datei für das Benutzersteuerelement aus der exemplarischen Vorgehensweise abrufen: Ändern von Anzeigemodi in einem Webparts Seitenthema und platzieren Sie die Datei in demselben Ordner wie die ASPX-Seite in diesem Codebeispiel.

Der zweite Teil des Codebeispiels ist das TextDisplayWebPart Steuerelement. Zum Ausführen des Codebeispiels müssen Sie diesen Quellcode kompilieren. Sie können es explizit kompilieren und die resultierende Assembly in den Bin-Ordner Ihrer Website oder den globalen Assemblycache einfügen. Alternativ können Sie den Quellcode in den App_Code Ordner Ihrer Website einfügen, wo sie zur Laufzeit dynamisch kompiliert wird. Eine exemplarische Vorgehensweise, die beide Methoden der Kompilierung veranschaulicht, finden Sie unter Exemplarische Vorgehensweise: Entwickeln und Verwenden eines benutzerdefinierten Webserversteuerelements. Beachten Sie, dass das Steuerelement über eine Eigenschaft namens verfügt ContentText; diese Eigenschaft enthält den Wert, den der Benutzer im Textfeld eingibt.

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
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
{
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class TextDisplayWebPart : WebPart
  {
    private String _contentText = null;
    TextBox input;
    Label DisplayContent;
    Literal lineBreak;

    [Personalizable(), WebBrowsable]
    public String ContentText
    {
      get { return _contentText; }
      set { _contentText = value; }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      DisplayContent.BackColor = Color.LightBlue;
      DisplayContent.Text = this.ContentText;
      this.Controls.Add(DisplayContent);

      lineBreak = new Literal();
      lineBreak.Text = @"<br />";
      Controls.Add(lineBreak);

      input = new TextBox();
      this.Controls.Add(input);
      Button update = new Button();
      update.Text = "Set Label Content";
      update.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(update);
    }

    private void submit_Click(object sender, EventArgs e)
    {
      // Update the label string.
      if (!string.IsNullOrEmpty(input.Text))
      {
        _contentText = input.Text + @"<br />";
        input.Text = String.Empty;
        DisplayContent.Text = this.ContentText;
      }
    }
  }
}
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
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

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class TextDisplayWebPart
    Inherits WebPart
    Private _contentText As String = Nothing
    Private _fontStyle As String = Nothing
    Private input As TextBox
    Private DisplayContent As Label
    Private lineBreak As Literal

    <Personalizable(), WebBrowsable()> _
    Public Property ContentText() As String
      Get
        Return _contentText
      End Get
      Set(ByVal value As String)
        _contentText = value
      End Set
    End Property

    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      DisplayContent = New Label()
      DisplayContent.BackColor = Color.LightBlue
      DisplayContent.Text = Me.ContentText
      Me.Controls.Add(DisplayContent)

      lineBreak = New Literal()
      lineBreak.Text = "<br />"
      Controls.Add(lineBreak)

      input = New TextBox()
      Me.Controls.Add(input)
      Dim update As New Button()
      update.Text = "Set Label Content"
      AddHandler update.Click, AddressOf Me.submit_Click
      Me.Controls.Add(update)

    End Sub

    Private Sub submit_Click(ByVal sender As Object, _
                             ByVal e As EventArgs)
      ' Update the label string.
      If input.Text <> String.Empty Then
        _contentText = input.Text + "<br />"
        input.Text = String.Empty
        DisplayContent.Text = Me.ContentText
      End If

    End Sub

  End Class

End Namespace

Der dritte Teil des Codebeispiels ist die Webseite. Beachten Sie, dass das <asp:catalogzone> Element für die Seite Deklarationen für zwei CatalogPart Steuerelemente enthält. Diese Steuerelemente werden Teil eines benutzerdefinierten CatalogPartCollection Objekts, das erstellt wird, wenn die Button1_Click Methode ausgeführt wird. Das PageCatalogPart Steuerelement enthält Webserversteuerelemente, die zuvor von einem Benutzer zur Laufzeit geschlossen wurden. Steuerelemente im PageCatalogPart Steuerelement können zurück zu einer Seite hinzugefügt werden. Das DeclarativeCatalogPart Steuerelement enthält eine Deklaration des benutzerdefinierten TextDisplayWebPart Steuerelements. Wenn sich die Seite im Katalogmodus befindet, kann ein Benutzer dem Zeichenblatt das TextDisplayWebPart Steuerelement hinzufügen, damit er im normalen Durchsuchenmodus verwendet werden kann.

<%@ Page Language="C#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>
<%@ Register TagPrefix="aspSample"
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="TextDisplayWebPartCS" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  // <snippet2>
  protected void Button1_Click(object sender, EventArgs e)
  {
    ArrayList list = new ArrayList(2);
    list.Add(PageCatalogPart1);
    list.Add(DeclarativeCatalogPart1);
    // Pass an ICollection object to the constructor.
    CatalogPartCollection myParts = new CatalogPartCollection(list);
    foreach (CatalogPart catalog in myParts)
    {
      catalog.Description = "My " + catalog.DisplayTitle;
    }

    // Use the IndexOf property to locate a CatalogPart control.
    int PageCatalogPartIndex = myParts.IndexOf(PageCatalogPart1);
    myParts[PageCatalogPartIndex].ChromeType = PartChromeType.TitleOnly;

    // Use the Contains method to see if a CatalogPart control exists.
    if (myParts.Contains(PageCatalogPart1))
    {
      WebPart closedWebPart = null;
      WebPartDescriptionCollection descriptions = PageCatalogPart1.GetAvailableWebPartDescriptions();
      if (descriptions.Count > 0)
      {
        closedWebPart = PageCatalogPart1.GetWebPart(descriptions[0]);
        closedWebPart.AllowClose = false;
      }
    }
    
    // Use indexers to display the details of the CatalogPart controls.
    Label1.Text = String.Empty;
    Label1.Text =
      "<h3>PageCatalogPart Details</h3>" +
      "ID: " + myParts[0].ID + "<br />" +
      "Count: " + myParts[0].GetAvailableWebPartDescriptions().Count;
    Label1.Text += 
      "<h3>DeclarativeCatalogPart Details</h3>" +
      "ID: " + myParts["DeclarativeCatalogPart1"].ID + "<br />" +
      "Count: " + myParts["DeclarativeCatalogPart1"].GetAvailableWebPartDescriptions().Count;
  }
  // </snippet2>
</script> 
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>PageCatalogPart Details</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:WebPartManager ID="WebPartManager1" runat="server" />
    <uc1:DisplayModeMenuCS ID="DisplayModeMenu1" runat="server" />
    <asp:WebPartZone ID="WebPartZone1" runat="server">
      <ZoneTemplate>
        <asp:BulletedList 
          ID="BulletedList1" 
          Runat="server"
          DisplayMode="HyperLink" 
          Title="Favorite Links" >
          <asp:ListItem Value="http://msdn.microsoft.com">
            MSDN
          </asp:ListItem>
          <asp:ListItem Value="http://www.asp.net">
            ASP.NET
          </asp:ListItem>
          <asp:ListItem Value="http://www.msn.com">
            MSN
          </asp:ListItem>
        </asp:BulletedList>
      </ZoneTemplate>
    </asp:WebPartZone>
    <asp:CatalogZone ID="CatalogZone1" runat="server">
      <ZoneTemplate>
        <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server">
          <WebPartsTemplate>
            <aspSample:TextDisplayWebPart runat="server" 
              id="TextDisplayWebPart1"
              Title="Text Display WebPart" />
          </WebPartsTemplate>
        </asp:DeclarativeCatalogPart>
        <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />  
      </ZoneTemplate>
    </asp:CatalogZone>
    <hr />
    <asp:Button ID="Button1" 
      runat="server" 
      Text="Display CatalogPart Properties" 
      OnClick="Button1_Click"/>
    <br />
    <asp:Label ID="Label1" runat="server" Text="" /> 
  </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuVB" 
  Src="DisplayModeMenuVB.ascx" %>
<%@ Register TagPrefix="aspSample"
  Namespace="Samples.AspNet.VB.Controls" 
  Assembly="TextDisplayWebPartVB" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' <snippet2>
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) 
    Dim list As New ArrayList(2)
    list.Add(PageCatalogPart1)
    list.Add(DeclarativeCatalogPart1)
    ' Pass an ICollection object to the constructor.
    Dim myParts As New CatalogPartCollection(list)
    Dim catalog As CatalogPart
    For Each catalog In  myParts
        catalog.Description = "My " + catalog.DisplayTitle
    Next catalog
    
    ' Use the IndexOf property to locate a CatalogPart control.
    Dim PageCatalogPartIndex As Integer = _
      myParts.IndexOf(PageCatalogPart1)
    myParts(PageCatalogPartIndex).ChromeType = PartChromeType.TitleOnly
    
    ' Use the Contains method to see if a CatalogPart control exists.
    If myParts.Contains(PageCatalogPart1) Then
        Dim closedWebPart As WebPart = Nothing
        Dim descriptions As WebPartDescriptionCollection = _
          PageCatalogPart1.GetAvailableWebPartDescriptions()
        If descriptions.Count > 0 Then
            closedWebPart = PageCatalogPart1.GetWebPart(descriptions(0))
            closedWebPart.AllowClose = False
        End If
    End If
    
    ' Use indexers to display the details of the CatalogPart controls.
    Label1.Text = String.Empty
    Label1.Text = _
      "<h3>PageCatalogPart Details</h3>" & _
      "ID: " & myParts(0).ID + "<br />" & _
      "Count: " & myParts(0).GetAvailableWebPartDescriptions().Count
    Label1.Text += _
      "<h3>DeclarativeCatalogPart Details</h3>" & _
      "ID: " & myParts("DeclarativeCatalogPart1").ID & "<br />" & _
      "Count: " & myParts("DeclarativeCatalogPart1") _
        .GetAvailableWebPartDescriptions().Count

End Sub 
' </snippet2>
</script>  
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>PageCatalogPart Details</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:WebPartManager ID="WebPartManager1" runat="server" />
    <uc1:DisplayModeMenuVB ID="DisplayModeMenu1" runat="server" />
    <asp:WebPartZone ID="WebPartZone1" runat="server">
      <ZoneTemplate>
        <asp:BulletedList 
          ID="BulletedList1" 
          Runat="server"
          DisplayMode="HyperLink" 
          Title="Favorite Links" >
          <asp:ListItem Value="http://msdn.microsoft.com">
            MSDN
          </asp:ListItem>
          <asp:ListItem Value="http://www.asp.net">
            ASP.NET
          </asp:ListItem>
          <asp:ListItem Value="http://www.msn.com">
            MSN
          </asp:ListItem>
        </asp:BulletedList>
      </ZoneTemplate>
    </asp:WebPartZone>
    <asp:CatalogZone ID="CatalogZone1" runat="server">
      <ZoneTemplate>
        <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server">
          <WebPartsTemplate>
            <aspSample:TextDisplayWebPart runat="server" 
              id="TextDisplayWebPart1"
              Title="Text Display WebPart" />
          </WebPartsTemplate>
        </asp:DeclarativeCatalogPart>
        <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />  
      </ZoneTemplate>
    </asp:CatalogZone>
    <hr />
    <asp:Button ID="Button1" 
      runat="server" 
      Text="Display CatalogPart Properties" 
      OnClick="Button1_Click"/>
    <br />
    <asp:Label ID="Label1" runat="server" Text="" /> 
  </form>
</body>
</html>

Wenn Sie die Seite in einem Browser laden, können Sie die Seite im Katalogmodus wechseln, indem Sie " Katalog " im Dropdown-Listensteuerelement für den Anzeigemodus auswählen. Sie können dem Zeichenblatt das benutzerdefinierte WebPart Steuerelement hinzufügen, indem Sie das Kontrollkästchen neben dem Kontrollkästchen aktivieren und auf "Hinzufügen" klicken. Klicken Sie auf "Schließen ", um den Seitenmodus zurückzugeben. Klicken Sie auf dem gerade hinzugefügten Steuerelement auf das Menü "Verben" (nach unten, der in der Titelleiste angezeigt wird), und klicken Sie dann auf " Schließen", wird das Steuerelement aus der PageCatalogPart Seite entfernt und dem Steuerelement hinzugefügt. Geben Sie die Seite im Katalogmodus zurück, und klicken Sie auf den Link " Seitenkatalog ", um den Inhalt des PageCatalogPart Steuerelements anzuzeigen. Beachten Sie, dass das steuerelement, das Sie geschlossen haben, jetzt dort angezeigt wird. Durch Klicken auf die Schaltfläche "KatalogPart-Eigenschaften anzeigen " wird auf das CatalogPartCollection Objekt zugegriffen und bestimmte Eigenschaften der enthaltenen CatalogPart Steuerelemente angezeigt.

Hinweise

Die CatalogPartCollection Klasse ist eine schreibgeschützte Auflistung von Steuerelementen, die in der Regel von einer CatalogZoneBase Zone verwendet werden, um den Satz von CatalogPart CatalogPart Steuerelementen nachzuverfolgen, die von der Zone enthalten sind.

Wenn eine Webparts Seite den Katalogmodus eingibt, erstellt die Zone ein neues CatalogPartCollection Objekt, das aus den CatalogPart Steuerelementen besteht. Jedes CatalogPart Steuerelement in der Auflistung kann Verweise auf null oder mehr Webserversteuerelemente enthalten, die in Form eines Katalogs verfügbarer Serversteuerelemente angezeigt werden.

Sie können eine Sammlung von Steuerelementen für ihre eigene programmgesteuerte Verwendung erstellen, wenn Sie beispielsweise einige CatalogPartCollection Massenvorgänge auf einer Reihe von CatalogPart Steuerelementen ausführen müssen. Obwohl das CatalogPartCollection Objekt schreibgeschützt ist, können Sie programmgesteuerte Änderungen an den zugrunde liegenden Steuerelementen vornehmen, auf die in der Auflistung verwiesen wird.

Konstruktoren

CatalogPartCollection()

Initialisiert eine neue leere Instanz der CatalogPartCollection-Klasse.

CatalogPartCollection(CatalogPartCollection, ICollection)

Initialisiert eine neue Instanz der CatalogPartCollection-Klasse, indem eine ICollection-Auflistung der in einer Zone vorhandenen CatalogPart-Steuerelemente sowie eine zusätzliche Auflistung von Steuerelementen übergeben werden.

CatalogPartCollection(ICollection)

Initialisiert eine neue Instanz der CatalogPartCollection-Klasse, indem eine ICollection-Auflistung von CatalogPart-Steuerelementen übergeben wird.

Felder

Empty

Verweist auf eine statische, schreibgeschützte, leere Instanz der Auflistung.

Eigenschaften

Count

Ruft die Anzahl der in der ReadOnlyCollectionBase-Instanz enthaltenen Elemente ab.

(Geerbt von ReadOnlyCollectionBase)
InnerList

Ruft die Liste der in der ReadOnlyCollectionBase-Instanz enthaltenen Elemente ab.

(Geerbt von ReadOnlyCollectionBase)
Item[Int32]

Ruft einen Member der Auflistung auf Grundlage seiner Position in der Auflistung ab oder legt diesen fest.

Item[String]

Gibt auf der Grundlage eines eindeutigen Zeichenfolgenbezeichners einen Member der Auflistung zurück.

Methoden

Contains(CatalogPart)

Ruft einen Wert ab, der angibt, ob ein bestimmtes Steuerelement in der Auflistung vorhanden ist.

CopyTo(CatalogPart[], Int32)

Kopiert die Auflistung in ein Array von CatalogPart-Objekten.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetEnumerator()

Gibt einen Enumerator zurück, der die ReadOnlyCollectionBase durchläuft.

(Geerbt von ReadOnlyCollectionBase)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
IndexOf(CatalogPart)

Gibt die Position eines bestimmten Members der Auflistung zurück.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

ICollection.CopyTo(Array, Int32)

Kopiert die gesamte ReadOnlyCollectionBase-Instanz in ein kompatibles eindimensionales Array, beginnend am angegebenen Index des Zielarrays.

(Geerbt von ReadOnlyCollectionBase)
ICollection.IsSynchronized

Ruft einen Wert ab, der angibt, ob der Zugriff auf ein ReadOnlyCollectionBase-Objekt synchronisiert (threadsicher) ist.

(Geerbt von ReadOnlyCollectionBase)
ICollection.SyncRoot

Ruft ein Objekt ab, mit dem der Zugriff auf ein ReadOnlyCollectionBase-Objekt synchronisiert werden kann.

(Geerbt von ReadOnlyCollectionBase)

Erweiterungsmethoden

Cast<TResult>(IEnumerable)

Wandelt die Elemente eines IEnumerable in den angegebenen Typ um

OfType<TResult>(IEnumerable)

Filtert die Elemente eines IEnumerable anhand eines angegebenen Typs

AsParallel(IEnumerable)

Ermöglicht die Parallelisierung einer Abfrage.

AsQueryable(IEnumerable)

Konvertiert einen IEnumerable in einen IQueryable.

Gilt für

Siehe auch