Freigeben über


DataGrid-Webserversteuerelement

Das DataGrid-Steuerelement stellt eine datengebundene Tabelle dar. Mit diesem Steuerelement können Sie verschiedene Typen von Spalten definieren, um das Layout der Zelleninhalte der Tabelle zu steuern (gebundene Spalten, Vorlagenspalten) und spezielle Funktionen hinzuzufügen (z. B. Spalten mit Bearbeitungsschaltflächen, Hyperlinks usw). Das Steuerelement unterstützt außerdem eine Vielzahl von Optionen für das Auslagern von Daten.

<asp:DataGridid="programmaticID"     DataSource='<%# DataBindingExpression %>'     AllowPaging="True|False"     AllowSorting="True|False"     AutoGenerateColumns="True|False"     BackImageUrl="url"     CellPadding="pixels"     CellSpacing="pixels"     DataKeyField="DataSourceKeyField"     GridLines="None|Horizontal|Vertical|Both"     HorizontalAlign="Center|Justify|Left|NotSet|Right"     PagedDataSource     PageSize="ItemCount"     ShowFooter="True|False"     ShowHeader="True|False"     VirtualItemCount="ItemCount"     OnCancelCommand="OnCancelCommandMethod"     OnDeleteCommand="OnDeleteCommandMethod"     OnEditCommand="OnEditCommandMethod"     OnItemCommand="OnItemCommandMethod"     OnItemCreated="OnItemCreatedMethod"     OnPageIndexChanged="OnPageIndexChangedMethod"     OnSortCommand="OnSortCommandMethod"     OnUpdateCommand="OnUpdateCommandMethod"     runat="server" >   <AlternatingItemStyle ForeColor="Blue"/>
   <EditItemStyle BackColor="Yellow"/>   <FooterStyle BorderColor="Gray"/>   <HeaderStyle BorderColor="Gray"/>   <ItemStyle Font-Bold="True"/>   <PagerStyle Font-Name="Ariel"/>   <SelectedItemStyle BackColor="Blue"/></asp:DataGrid>
or
<asp:DataGridid="programmaticID"     DataSource='<%# DataBindingExpression %>'     AutoGenerateColumns="False"     (other properties)     runat="server" >   <AlternatingItemStyle ForeColor="Blue"/>
   <EditItemStyle BackColor="Yellow"/>   <FooterStyle BorderColor="Gray"/>   <HeaderStyle BorderColor="Gray"/>   <ItemStyle Font-Bold="True"/>   <PagerStyle Font-Name="Ariel"/>   <SelectedItemStyle BackColor="Blue"/>   <Columns>      <asp:BoundColumn           DataField="DataSourceField"           DataFormatString="FormatString"           FooterText="FooterText"           HeaderImageUrl="url"           HeaderText="HeaderText"           ReadOnly="True|False"           SortExpression ="DataSourceFieldToSortBy"           Visible="True|False"           FooterStyle-property="value"           HeaderStyle-property="value"           ItemStyle-property="value"/>      <asp:ButtonColumn           ButtonType="LinkButton|PushButton"           Command="BubbleText"           DataTextField="DataSourceField"           DataTextFormatString="FormatString"           FooterText="FooterText"           HeaderImageUrl="url"           HeaderText="HeaderText"           ReadOnly="True|False"           SortExpression="DataSourceFieldToSortBy"           Text="ButtonCaption"           Visible="True|False"/>      <asp:EditCommandColumn           ButtonType="LinkButton|PushButton"           CancelText="CancelButtonCaption"           EditText="EditButtonCaption"           FooterText="FooterText"           HeaderImageUrl="url"           HeaderText="HeaderText"           ReadOnly="True|False"           SortExpression="DataSourceFieldToSortBy"           UpdateText="UpdateButtonCaption"           Visible="True|False"/>      <asp:HyperLinkColumn           DatahrefField="DataSourceField"           DatahrefFormatString="FormatExpression"           DataTextField="DataSourceField"           DataTextFormatString="FormatExpression"           FooterText="FooterText"           HeaderImageUrl="url"           HeaderText="HeaderText"           href="url"           ReadOnly="True|False"           SortExpression="DataSourceFieldToSortBy"           Target="window"           Text="HyperLinkText"           Visible="True|False"/>      <asp:TemplateColumn           FooterText="FooterText"           HeaderImageUrl="url"           HeaderText="HeaderText"           ReadOnly="True|False"           SortExpression="DataSourceFieldToSortBy"           Visible="True|False">         <HeaderTemplate>            Header template HTML         </HeaderTemplate >         <ItemTemplate>            ItemTemplate HTML         </ItemTemplate>         <EditItemTemplate>            EditItem template HTML         </EditItemTemplate>         <FooterTemplate>            Footer template HTML         </FooterTemplate>      </asp:TemplateColumn>   </Columns></asp:DataGrid>

Hinweise

Das DataGrid-Steuerelement zeigt die Felder einer Datenquelle als Spalten in einer Tabelle an. Jede Zeile im DataGrid-Steuerelement stellt einen Datensatz in der Datenquelle dar. Das DataGrid-Steuerelement unterstützt das Auswählen, Bearbeiten, Löschen, Auslagern und Sortieren.

Standardmäßig ist die AutoGenerateColumns-Eigenschaft auf true gesetzt, wodurch ein BoundColumn-Objekt für jedes Feld in der Datenquelle erstellt wird. Die einzelnen Felder werden anschließend in der Reihenfolge, in der sie in der Datenquelle enthalten sind, als Spalte im DataGrid-Steuerelement dargestellt.

Sie können darüber hinaus manuell festlegen, welche Spalten im DataGrid-Steuerelement angezeigt werden, indem Sie die AutoGenerateColumns-Eigenschaft auf false setzen und anschließend zwischen dem öffnenden und dem schließenden <Columns>-Tag die anzuzeigenden Spalten auflisten. Die angegebenen Spalten werden in der Reihenfolge, in der sie aufgeführt sind, der Columns-Auflistung hinzugefügt. Dadurch können Sie die Spalten im DataGrid-Steuerelement programmgesteuert steuern.

Hinweis   Die Reihenfolge, in der die Spalten im DataGrid-Steuerelement angezeigt werden, wird durch die Reihenfolge bestimmt, in der die Spalten in der Columns-Auflistung aufgeführt sind. Sie können zwar die Reihenfolge der Spalten programmgesteuert ändern, indem Sie die Columns-Auflistung bearbeiten, es ist jedoch einfacher, die Spalten in der gewünschten Anzeigereihenfolge aufzulisten.

Hinweis   Explizit deklarierte Spalten können zusammen mit automatisch erstellten Spalten verwendet werden. Wenn Sie beide Spaltenarten verwenden, werden explizit deklarierte Spalten zuerst dargestellt und anschließend die automatisch erstellten Spalten. Automatisch erstellte Spalten werden der Columns-Auflistung nicht hinzugefügt.

Unterschiedliche Spaltentypen bestimmen das Verhalten der Spalten im Steuerelement. Beim DataGrid-Steuerelement können Sie die folgenden Spaltentypen verwenden:

Spaltentyp Beschreibung
EditCommandColumn Kapselt die am häufigsten verwendeten Bearbeitungsbefehle (Bearbeiten, Aktualisieren, Abbrechen) in einem vordefinierten Spaltentyp ein.
HyperLinkColumn Erstellt eine Spalte mit einer Gruppe von Hyperlinks, die an den Wert eines Datenfeldes gebunden sind. So kann z. B. eine Tabelle, die eine Liste von Aufträgen anzeigt, eine Hyperlinkspalte enthalten, in der das OrderID-Feld als Hyperlink zu einer Seite dargestellt wird, auf der die Auftragsdetails angezeigt werden.
BoundColumn Erstellt eine Spalte, die an ein Feld in der Datenquelle gebunden ist und mit Hilfe von Formaten in einer Tabellenzelle dargestellt wird. Dies ist der Standardspaltentyp für das DataGrid-Steuerelement.
ButtonColumn Erstellt eine Spalte, die für jedes Element in der Spalte eine benutzerdefinierte Befehlsschaltfläche enthält, z. B. Hinzufügen oder Entfernen.
TemplateColumn Erstellt eine Spalte, in der Sie das Layout von Steuerelementen mit Hilfe von Vorlagen für benutzerdefinierte HTML-Elemente und Steuerelemente definieren können.

In den folgenden Tabellen finden Sie Informationen zu den Spalten, die Sie für das DataGrid-Steuerelement deklarieren können.

Allgemeine DataGridColumn-Eigenschaften

Diese Eigenschaften sind für alle DataGrid-Spaltentypen verfügbar.

Eigenschaft Beschreibung
FooterText Text, der am unteren Rand der Spalte angezeigt wird.
HeaderImageUrl Der URL eines Bildes, das statt des HeaderText-Textes in der Kopfzeile der Spalte angezeigt wird.
HeaderText Text, der am oberen Rand der Spalte angezeigt wird.
Owner Ein Verweis auf das DataGrid-Steuerelement, zu dem die gebundene Spalte gehört (schreibgeschützt).

Diese Eigenschaft wird nur während der Programmierung verwendet.

SortExpression Der Name des Feldes, nach dem die Datenquelle sortiert wird, wenn der Benutzer angibt, dass nach dem Inhalt dieser Spalte sortiert werden soll.
Visible True, wenn die Spalte angezeigt wird, andernfalls false.

BoundColumn-Eigenschaften

Eigenschaft Beschreibung
DataField Das Feld oder die Eigenschaft des Objekts in DataSource, das bzw. die die Datenquelle für die Spalte darstellt.
DataFormatString Eine Zeichenfolge für einen Formatierungausdruck, der angibt, wie das Feld in der Zelle angezeigt wird. Dies entspricht den Formatierungsausdrücken, die von der String.Format-Methode verwendet werden.
ReadOnly True, falls die Spalte nicht bearbeitet werden kann, wenn die Zeile in den Bearbeitungsmodus geschaltet wird, andernfalls false.

ButtonColumn-Eigenschaften

Eigenschaft Beschreibung
ButtonType Der Typ der darzustellenden Schaltfläche. Dies ist standardmäßig LinkButton.

Diese Eigenschaft wird beim Programmieren über die ButtonColumnType-Enumeration festgelegt.

CommandName Eine Zeichenfolge, die den Befehl angibt, der beim Klicken auf eine Schaltfläche in der Spalte gesendet wird. Diese Zeichenfolge ist in der Ereignisbehandlungsmethode über die CommandSource-Eigenschaft des e-Ereignisargumentobjekts verfügbar.

Das DataGrid-Steuerelement erkennt bestimmte Standardbefehlsnamen: Auswählen, Sortieren, Aktualisieren, Abbrechen, Bearbeiten, Löschen und Auslagern.

DataTextField Der Feldname aus der DataSource, die an die Text-Eigenschaft der Schaltfläche in der ButtonColumn gebunden ist.
DataTextFormatString Eine Zeichenfolge für einen Formatierungausdruck, der angibt, wie das Feld in der Zelle angezeigt wird.
Text Die Beschriftung, die auf der Schaltfläche in dieser Spalte angezeigt werden soll. Wenn DataTextField gesetzt ist, überschreibt diese diesen Wert.

TemplateColumn-Eigenschaften

Eigenschaft Beschreibung
EditItemTemplate Die HTML-Elemente und Steuerelemente, die die Spalte definieren, wenn diese im Bearbeitungsmodus ist.
FooterTemplate Die HTML-Elemente und Steuerelemente, die die Fußzeile der Spalte definieren.
HeaderTemplate Die HTML-Elemente und Steuerelemente, die die Kopfzeile der Spalte definieren.
ItemTemplate Die HTML-Elemente und Steuerelemente, die die Spalte definieren, wenn diese angezeigt wird.

HyperLinkColumn-Eigenschaften

Eigenschaft Beschreibung
DatahrefField Das Feld oder die Eigenschaft des Objekts in DataSource, das bzw. die den URL der Zielseite bereitstellt.
DatahrefFormatString Ein Formatierungsausdruck, der mit der Text-Eigenschaft verwendet werden soll.
DataTextField Das Feld oder die Eigenschaft des Objekts in DataSource, das bzw. die die Datenquelle für die Text-Eigenschaft der Spalten darstellt.
DataTextFormatString Die Formatierungszeichenfolge, die angibt, wie die Text-Eigenschaft in dem Steuerelement angezeigt wird.
href Der URL der Zielseite. Wenn DatahrefField gesetzt ist, überschreibt sie diese Eigenschaft.
Target Das Zielfenster, in dem die Seite angezeigt wird. Dies kann der Name eines Fensters oder ein Frameverweis sein, z. B. _TOP.
Text Der Text des Hyperlinks.

EditCommandColumn-Eigenschaften

Eigenschaft Beschreibung
ButtonType Der Typ der darzustellenden Schaltfläche. Dies ist standardmäßig LinkButton.

Diese Eigenschaft wird beim Programmieren über die ButtonColumnType-Enumeration festgelegt.

EditText Die Zeichenfolge, die auf der Schaltfläche Bearbeiten angezeigt werden soll.
UpdateText Die Zeichenfolge, die auf der Schaltfläche Aktualisieren angezeigt werden soll.
CancelText Die Zeichenfolge, die auf der Schaltfläche Abbrechen angezeigt werden soll.

Sie können die Darstellung des DataGrid-Steuerelements anpassen, indem Sie die Formateigenschaften der verschiedenen Teile des Steuerelements festlegen. In der folgenden Tabelle werden die Formateigenschaften für die unterschiedlichen Teile des DataGrid-Steuerelements aufgelistet.

Formateigenschaften

Style-Eigenschaft Beschreibung Style-Klasse
AlternatingItemStyle Das Format jedes zweiten Elements (alternierende Elemente). TableItemStyle
EditItemStyle Das Format des Elements, das bearbeitet wird. TableItemStyle
FooterStyle Das Format der Fußzeile am unteren Ende der Liste (falls vorhanden). TableItemStyle
HeaderStyle Das Format der Kopfzeile am oberen Ende der Liste (falls vorhanden). TableItemStyle
ItemStyle Das Format der einzelnen Elemente. Style
PagerStyle Das Format der Steuerelemente für die Seitenauswahl. DataGridPagerStyle
SelectedItemStyle Das Format des derzeit ausgewählten Elements. TableItemStyle

Weitere Informationen über die Eigenschaften, die für jede Formatklasse unterstützt werden, finden Sie unter Eigenschaften von Style-Objekten.

Das DataGrid-Steuerelement enthält integrierte Funktionen für die Anzeige seines Inhalts in Seitensegmenten. Die Anzahl der Elemente auf einer Seite wird durch die PageSize-Eigenschaft bestimmt. Wenn für die PageSize-Eigenschaft kein Wert angegeben ist, zeigt das DataGrid-Steuerelement zehn Elemente auf einmal auf der Seite an.

Standardmäßig ist die Auslagerung deaktiviert. Um die Auslagerung zu aktivieren, setzen Sie diese AllowPaging-Eigenschaft auf true und geben Code zur Behandlung des PageIndexChanged-Ereignisses ein. Die typische Logik für das PageIndexChanged-Ereignis setzt die CurrentPageIndex-Eigenschaft auf den Index der anzuzeigenden Seite und bindet dann die Datenquelle wieder an das Steuerelement. Auf den Index der anzuzeigenden Seite wird häufig mit der NewPageIndex-Eigenschaft des an den Ereignishandler übergebenen DataGridPageChangedEventArgs-Objekts zugegriffen.

Bei der Standardauslagerung geht das DataGrid-Steuerelement davon aus, dass die Datenquelle alle anzuzeigenden Elemente enthält. Das DataGrid-Steuerelement berechnet die Indizes der Elemente auf der aktuellen Seite anhand des Seitenindexes, der durch die CurrentPageIndex-Eigenschaft angegeben wird, sowie anhand der Anzahl der Elemente auf der Seite, die durch die PageSize-Eigenschaft angegeben wird.

Sie können das Aussehen des DataGrid-Steuerelements weiter anpassen, indem Sie den durch das DataGrid-Steuerelement erstellten <td>- und <tr>-Tags programmgesteuert Attribute hinzufügen. Sie können Attribute in die Tags einfügen, indem Sie einen benutzerdefinierten Ereignishandler für das ItemCreated- oder das ItemDataBound-Ereignis bereitstellen. Im Allgemeinen werden Attribute im Ereignishandler für das ItemCreated-Ereignis hinzugefügt. Wenn die Attribute jedoch auf tatsächlichen Daten beruhen, fügen Sie die Attribute im Ereignishandler für das ItemDataBound-Ereignis hinzu.

Um dem <td>-Tag ein Attribut hinzuzufügen, rufen Sie zuerst das TableCell-Objekt ab, das die Zelle in dem DataGrid-Steuerelement darstellt, der Sie das Attribut hinzufügen möchten. Die Control.Controls-Auflistung für die Item-Eigenschaft (DataGridItemEventArgs-Indexer) der in den Ereignishandler übergebenen DataGridItemEventArgs kann zum Abrufen der gewünschten TableCell verwendet werden. Anschließend können Sie mit der AttributeCollection.Add-Methode der Attributes-Auflistung für die TableCell dem <td>-Tag Attribute hinzufügen.

Um dem <tr>-Tag ein Attribut hinzuzufügen, rufen Sie zuerst das DataGridItem-Objekt ab, das die Zeile in dem DataGrid-Steuerelement darstellt, der Sie das Attribut hinzufügen möchten. Die Item-Eigenschaft (DataGridItemEventArgs-Indexer) der in den Ereignishandler übergebenen DataGridItemEventArgs kann zum Abrufen des gewünschten DataGridItem verwendet werden. Anschließend können Sie mit der AttributeCollection.Add-Methode der Attributes-Auflistung für das DataGridItem dem <tr>-Tag Attribute hinzufügen.

Vorsicht   Text wird nicht in HTML codiert, bevor er im DataGrid-Steuerelement angezeigt wird. Auf diese Weise können Skripts in HTML-Tags in den Text eingebunden werden. Wenn die Werte in diesem Steuerelement aus Benutzereingaben stammen, müssen die Werte unbedingt geprüft werden, um die Sicherheit zu gewährleisten.

Weitere Informationen zu den Eigenschaften und Ereignissen des DataGrid-Webserversteuerelements finden Sie unter DataGrid-Klasse.

Beispiel

Das folgende Beispiel veranschaulicht, wie mit dem DataGrid-Steuerelement die Elemente in der Datenquelle angezeigt werden.

<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
 
<html>
   <script runat="server">

      Function CreateDataSource() As ICollection

         Dim dt As New DataTable()
         Dim dr As DataRow
         Dim i As Integer
        
         dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
         dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
         dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
        
         For i = 0 To 8
            dr = dt.NewRow()
            
            dr(0) = i
            dr(1) = "Item " + i.ToString()
            dr(2) = 1.23 *(i + 1)
            
            dt.Rows.Add(dr)
         Next i
        
         Dim dv As New DataView(dt)
         Return dv

      End Function 'CreateDataSource

      Sub Page_Load(sender As Object, e As EventArgs)
        
         If Not IsPostBack Then
            ' Need to load this data only once.
            ItemsGrid.DataSource = CreateDataSource()
            ItemsGrid.DataBind()
         End If

      End Sub 'Page_Load
 
   </script>
 
<body>
 
   <form runat="server">
 
      <h3>DataGrid Example</h3>
 
      <b>Product List</b>
 
      <asp:DataGrid id="ItemsGrid"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AutoGenerateColumns="true"
           runat="server">

         <HeaderStyle BackColor="#00aaaa">
         </HeaderStyle> 
 
      </asp:DataGrid>
 
   </form>
 
</body>
</html>
[C#]
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>

<html>
<script runat="server">

   ICollection CreateDataSource() 
   {
      DataTable dt = new DataTable();
      DataRow dr;

      dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
      dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
      dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));

      for (int i = 0; i < 9; i++) 
      {
         dr = dt.NewRow();

         dr[0] = i;
         dr[1] = "Item " + i.ToString();
         dr[2] = 1.23 * (i + 1);

         dt.Rows.Add(dr);
      }

      DataView dv = new DataView(dt);
      return dv;
   }

   void Page_Load(Object sender, EventArgs e) 
   {

      if (!IsPostBack) 
      {
         // Need to load this data only once.
         ItemsGrid.DataSource= CreateDataSource();
         ItemsGrid.DataBind();
      }
   }

</script>

<body>

   <form runat="server">

      <h3>DataGrid Example</h3>

      <b>Product List</b>

      <asp:DataGrid id="ItemsGrid"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           HeaderStyle-BackColor="#00aaaa"
           AutoGenerateColumns="true"
           runat="server">

      </asp:DataGrid>

   </form>

</body>
</html>

Das folgende Beispiel veranschaulicht, wie in einem DataGrid-Steuerelement die Auslagerung verwendet wird.

<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
 
<html>

   <script runat="server">
 
      Dim Cart As DataTable
      Dim CartView As DAtaView

      Function CreateDataSource() As ICollection

         Dim dt As New DataTable()
         Dim dr As DataRow
            
         dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
         dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
         dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
            
         Dim i As Integer
         For i = 0 To 99
            dr = dt.NewRow()
                
            dr(0) = i
            dr(1) = "Item " + i.ToString()
            dr(2) = 1.23 *(i + 1)
            dt.Rows.Add(dr)
         Next i
            
         Dim dv As New DataView(dt)
         Return dv

      End Function 'CreateDataSource

      Sub Page_Load(sender As Object, e As EventArgs)
            
         If Not IsPostBack Then
            ' Need to load this data only once.
            ItemsGrid.DataSource = CreateDataSource()
            ItemsGrid.DataBind()
         End If
            
         If CheckBox1.Checked Then
            ItemsGrid.PagerStyle.Mode = PagerMode.NumericPages
         Else
            ItemsGrid.PagerStyle.Mode = PagerMode.NextPrev
         End If 

      End Sub 'Page_Load

      Sub Grid_Change(sender As Object, e As DataGridPageChangedEventArgs)
            
         ' Set CurrentPageIndex to the page the user clicked.
         ItemsGrid.CurrentPageIndex = e.NewPageIndex
            
         ' Rebind the data. 
         ItemsGrid.DataSource = CreateDataSource()
         ItemsGrid.DataBind()

      End Sub 'Grid_Change  

</script>
 
<body>
 
   <form runat="server">

      <h3>DataGrid Paging Example</h3>
 
      <asp:DataGrid id="ItemsGrid" runat="server"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AllowPaging="true"
           AutoGenerateColumns="false"        
           OnPageIndexChanged="Grid_Change">
 
         <HeaderStyle BackColor="#00aaaa">
         </HeaderStyle>
  
         <PagerStyle Mode="NextPrev">
         </PagerStyle> 

         <Columns>

            <asp:BoundColumn 
                 HeaderText="Number" 
                 DataField="IntegerValue"/>
 
            <asp:BoundColumn 
                 HeaderText="Item" 
                 DataField="StringValue"/>

            <asp:BoundColumn 
                 HeaderText="Price" 
                 DataField="CurrencyValue" 
                 DataFormatString="{0:c}">
 
               <ItemStyle HorizontalAlign="right">
               </ItemStyle>
     
            </asp:BoundColumn>

         </Columns>

      </asp:DataGrid>

      <br>

      <asp:CheckBox id="CheckBox1" 
                    Text="Show page navigation"
                    AutoPostBack="true"
                    runat="server"/>
 
   </form>
 
</body>
</html>
[C#]
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
 
<html>

   <script runat="server">
 
      DataTable Cart;
      DataView CartView;
 
      ICollection CreateDataSource() 
      {
         DataTable dt = new DataTable();
         DataRow dr;
 
         dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
         dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
         dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
 
         for (int i = 0; i < 100; i++) 
         {
            dr = dt.NewRow();
 
            dr[0] = i;
            dr[1] = "Item " + i.ToString();
            dr[2] = 1.23 * (i+1); 
            dt.Rows.Add(dr);
         }
 
         DataView dv = new DataView(dt);
         return dv;
      }
 
      void Page_Load(Object sender, EventArgs e) 
      { 
 
         if (!IsPostBack) 
         {
            // Need to load this data only once.
            ItemsGrid.DataSource = CreateDataSource();
            ItemsGrid.DataBind();
         }
 
         if (CheckBox1.Checked)
            ItemsGrid.PagerStyle.Mode = PagerMode.NumericPages;
         else
            ItemsGrid.PagerStyle.Mode = PagerMode.NextPrev;

      }
 
      void Grid_Change(Object sender, DataGridPageChangedEventArgs e) 
      {
 
         // Set CurrentPageIndex to the page the user clicked.
         ItemsGrid.CurrentPageIndex = e.NewPageIndex;

         // Rebind the data. 
         ItemsGrid.DataSource = CreateDataSource();
         ItemsGrid.DataBind();
      
      }
 
   </script>
 
<body>
 
   <form runat="server">

      <h3>DataGrid Paging Example</h3>
 
      <asp:DataGrid id="ItemsGrid" runat="server"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AllowPaging="true"
           AutoGenerateColumns="false"        
           OnPageIndexChanged="Grid_Change">
 
         <HeaderStyle BackColor="#00aaaa">
         </HeaderStyle>
 
         <PagerStyle Mode="NextPrev">
         </PagerStyle> 

         <Columns>

            <asp:BoundColumn 
                 HeaderText="Number" 
                 DataField="IntegerValue"/>
   
            <asp:BoundColumn 
                 HeaderText="Item" 
                 DataField="StringValue"/>

            <asp:BoundColumn 
                 HeaderText="Price" 
                 DataField="CurrencyValue" 
                 DataFormatString="{0:c}">
 
               <ItemStyle HorizontalAlign="right">
               </ItemStyle>
     
            </asp:BoundColumn>

         </Columns>

      </asp:DataGrid>

      <br>

      <asp:CheckBox id="CheckBox1" 
                    Text="Show page navigation"
                    AutoPostBack="true"
                    runat="server"/>
 
   </form>
 
</body>
</html>

In der Regel wird jedes Mal, wenn das DataGrid-Steuerelement eine Seite mit Informationen anzeigt, eine Datenquelle geladen, die alle Elemente aus der Liste enthält. Im Falle einer sehr umfangreichen Datenquelle kann dabei eine große Menge an Ressourcen beansprucht werden. Die benutzerdefinierte Auslagerung ermöglicht es Ihnen, nur das Datensegment zu laden, das für die Anzeige der betreffenden Seite benötigt wird.

Um die benutzerdefinierte Auslagerung zu aktivieren, setzen Sie die Eigenschaften AllowPaging und AllowCustomPaging auf true und geben Code zur Behandlung des PageIndexChanged-Ereignisses ein. Die typische Logik für das PageIndexChanged-Ereignis setzt die CurrentPageIndex-Eigenschaft auf den Index der anzuzeigenden Seite und bindet dann die Datenquelle wieder an das Steuerelement. Auf den Index der anzuzeigenden Seite wird häufig mit der NewPageIndex-Eigenschaft des an den Ereignishandler übergebenen DataGridPageChangedEventArgs-Objekts zugegriffen. Erstellen Sie als Nächstes eine Datenquelle, die die Daten enthält, die auf einer einzigen Seite angezeigt werden sollen. Verwenden Sie nach dem Erstellen der Datenquelle die DataBind-Methode, um die Datenquelle an das DataGrid-Steuerelement zu binden. Da nur ein Segment der Daten geladen ist, setzen Sie die VirtualItemCount-Eigenschaft auf die Gesamtzahl der Elemente, die im DataGrid-Steuerelement angezeigt werden sollen. Dadurch kann das Steuerelement ermitteln, wie viele Seiten insgesamt für die Auslagerungssteuerelemente benötigt werden.

Bei der Standardauslagerung geht das DataGrid-Steuerelement davon aus, dass die Datenquelle nur die Elemente enthält, die auf der aktuellen Seite angezeigt werden sollen. Alle Elemente in der Datenquelle bis zu der Anzahl der Elemente, die in der PageSize-Eigenschaft angegeben wird, werden angezeigt.

Das folgende Beispiel veranschaulicht, wie in einem DataGrid-Steuerelement die benutzerdefinierte Auslagerung verwendet wird.

<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>

<html>
   <script runat="server">

      Dim start_index As Integer

      Function CreateDataSource() As ICollection
            
         Dim dt As New DataTable()
         Dim dr As DataRow
            
         dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
         dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
         dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
            
         Dim i As Integer
         For i = start_index To (start_index + ItemsGrid.PageSize) - 1
            dr = dt.NewRow()
                
            dr(0) = i
            dr(1) = "Item " + i.ToString()
            dr(2) = 1.23 *(i + 1)
                
            dt.Rows.Add(dr)
         Next i
           
         Dim dv As New DataView(dt)
         Return dv

      End Function 'CreateDataSource
        
      Sub Page_Load(sender As Object, e As EventArgs)
            
         If CheckBox1.Checked Then
            ItemsGrid.PagerStyle.Mode = PagerMode.NumericPages
         Else
            ItemsGrid.PagerStyle.Mode = PagerMode.NextPrev
         End If 

         If Not IsPostBack Then
            start_index = 0
            ItemsGrid.VirtualItemCount = 100
         End If
            
         BindGrid()

      End Sub 'Page_Load

      Sub Grid_Change(sender As Object, e As DataGridPageChangedEventArgs)
            
          ItemsGrid.CurrentPageIndex = e.NewPageIndex
          start_index = ItemsGrid.CurrentPageIndex * ItemsGrid.PageSize
          BindGrid()
 
      End Sub 'Grid_Change

      Sub BindGrid()
            
         ItemsGrid.DataSource = CreateDataSource()
         ItemsGrid.DataBind()

      End Sub 'BindGrid 

   </script>

<body>

   <form runat="server">

      <h3>DataGrid Custom Paging Example</h3>

      <asp:DataGrid id="ItemsGrid" runat="server"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AllowPaging="true"
           AllowCustomPaging="true"
           AutoGenerateColumns="false"
           OnPageIndexChanged="Grid_Change">

         <PagerStyle NextPageText="Forward"
                     PrevPageText="Back"
                     Position="Bottom"
                     PageButtonCount="5"
                     BackColor="#00aaaa">
         </PagerStyle>

         <AlternatingItemStyle BackColor="yellow">
         </AlternatingItemStyle>

         <HeaderStyle BackColor="#00aaaa">
         </HeaderStyle>

         <Columns>
      
            <asp:BoundColumn HeaderText="Number" 
                 DataField="IntegerValue"/>

            <asp:BoundColumn
                 HeaderText="Item" 
                 DataField="StringValue"/>

            <asp:BoundColumn 
                 HeaderText="Price" 
                 DataField="CurrencyValue" 
                 DataFormatString="{0:c}">

               <ItemStyle HorizontalAlign="right">
               </ItemStyle>
   
            </asp:BoundColumn>

         </Columns>
      
      </asp:DataGrid>

      <br>

      <asp:CheckBox id="CheckBox1" 
           Text = "Show page navigation"
           AutoPostBack="true"
           runat="server"/>

   </form>

</body>
</html>
[C#]
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>

<html>
   <script runat="server">

      int start_index;

      ICollection CreateDataSource() 
      {

         DataTable dt = new DataTable();
         DataRow dr;

         dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
         dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
         dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
 
         for (int i = start_index; i < start_index + ItemsGrid.PageSize; i++) 
         {
            dr = dt.NewRow();

            dr[0] = i;
            dr[1] = "Item " + i.ToString();
            dr[2] = 1.23 * (i+1);

            dt.Rows.Add(dr);
         }

         DataView dv = new DataView(dt);
         return dv;
      }

      void Page_Load(Object sender, EventArgs e) 
      {

         if (CheckBox1.Checked)
            ItemsGrid.PagerStyle.Mode=PagerMode.NumericPages;
         else
            ItemsGrid.PagerStyle.Mode=PagerMode.NextPrev;

         if (!IsPostBack)
         {
            start_index = 0; 
            ItemsGrid.VirtualItemCount=100; 
         }

         BindGrid();
      
      }

      void Grid_Change(Object sender, DataGridPageChangedEventArgs e) 
      {
       
         ItemsGrid.CurrentPageIndex = e.NewPageIndex;
         start_index = ItemsGrid.CurrentPageIndex * ItemsGrid.PageSize;
         BindGrid();
     
      }

      void BindGrid() 
      {

         ItemsGrid.DataSource=CreateDataSource();
         ItemsGrid.DataBind();
     
      }

   </script>

<body>

   <form runat="server">

      <h3>DataGrid Custom Paging Example</h3>

      <asp:DataGrid id="ItemsGrid" runat="server"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AllowPaging="true"
           AllowCustomPaging="true"
           AutoGenerateColumns="false"
           OnPageIndexChanged="Grid_Change">

         <PagerStyle NextPageText="Forward"
                     PrevPageText="Back"
                     Position="Bottom"
                     PageButtonCount="5"
                     BackColor="#00aaaa">
         </PagerStyle>

         <AlternatingItemStyle BackColor="yellow">
         </AlternatingItemStyle>

         <HeaderStyle BackColor="#00aaaa">
         </HeaderStyle>

         <Columns>
      
            <asp:BoundColumn HeaderText="Number" 
                 DataField="IntegerValue"/>

            <asp:BoundColumn
                 HeaderText="Item" 
                 DataField="StringValue"/>

            <asp:BoundColumn 
                 HeaderText="Price" 
                 DataField="CurrencyValue" 
                 DataFormatString="{0:c}">

               <ItemStyle HorizontalAlign="right">
               </ItemStyle>
   
            </asp:BoundColumn>

         </Columns>
      
      </asp:DataGrid>

      <br>

      <asp:CheckBox id="CheckBox1" 
           Text = "Show page navigation"
           AutoPostBack="true"
           runat="server"/>

   </form>

</body>
</html>

Das DataGrid-Steuerelement stellt auch integrierte Sortierfunktionen bereit. Wenn die Sortierung aktiviert ist, werden LinkButton-Steuerelemente in der Kopfzeile jeder Spalte dargestellt, mit denen Sie das DataGrid nach der ausgewählten Spalte sortieren können. Das SortCommand-Ereignis wird ausgelöst, wenn auf ein LinkButton-Steuerelement geklickt wird. Code für den Ereignishandler muss von Ihnen angegeben werden. Bei der typischen Logik für den Handler wird die Liste sortiert, dann werden die Daten erneut an das DataGrid-Steuerelement gebunden.

Das folgende Beispiel veranschaulicht, wie in einem DataGrid-Steuerelement die Sortierung verwendet wird.

<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
 
<html>
   <script runat="server">
    
      Dim SortExpression As String
 
      Function CreateDataSource() As ICollection

         Dim dt As New DataTable()
         Dim dr As DataRow
         Dim Rand_Num As New Random()
        
         dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
         dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
         dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
        
         Dim i As Integer
         For i = 0 To 14
            dr = dt.NewRow()
            
            dr(0) = i
            dr(1) = "Item " & i.ToString()
            dr(2) = 1.23 * Rand_Num.Next(1, 15)
            
            dt.Rows.Add(dr)
         Next i
        
         Dim dv As New DataView(dt)
         dv.Sort = SortExpression
         Return dv

      End Function 'CreateDataSource

      Sub Page_Load(sender As Object, e As EventArgs)
        
         If Not IsPostBack Then
            
            If SortExpression = "" Then
               SortExpression = "IntegerValue"
            End If

            ItemsGrid.DataSource = CreateDataSource()
            ItemsGrid.DataBind()

         End If

      End Sub 'Page_Load

      Sub Sort_Grid(sender As Object, e As DataGridSortCommandEventArgs)
    
         SortExpression = e.SortExpression.ToString()
         ItemsGrid.DataSource = CreateDataSource()
         ItemsGrid.DataBind()

      End Sub 'Sort_Grid
 
   </script>
 
<body>
 
   <form runat="server">
 
      <h3>DataGrid Sorting Example</h3>
 
      <asp:DataGrid id="ItemsGrid" runat="server"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AllowSorting="true"
           OnSortCommand="Sort_Grid"
           HeaderStyle-BackColor="#00aaaa"
           AutoGenerateColumns="true"/>
 
   </form>
 
</body>
</html>
[C#]
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
 
<html>

   <script runat="server">
    
      string SortExpression;
 
      ICollection CreateDataSource() 
      {
         DataTable dt = new DataTable();
         DataRow dr;
         Random Rand_Num = new Random();
 
         dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
         dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
         dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
 
         for (int i = 0; i < 15; i++) 
         {
            dr = dt.NewRow();
   
            dr[0] = i;
            dr[1] = "Item " + i.ToString();
            dr[2] = 1.23 * Rand_Num.Next(1, 15);
 
            dt.Rows.Add(dr);
         }
 
         DataView dv = new DataView(dt);
         dv.Sort=SortExpression;
         return dv;
      }
 
      void Page_Load(Object sender, EventArgs e) 
      {
         if (!IsPostBack) 
         {
 
            if (SortExpression == "")
               SortExpression = "IntegerValue";      
            ItemsGrid.DataSource = CreateDataSource();
            ItemsGrid.DataBind();
         }
      }
 
      void Sort_Grid(Object sender, DataGridSortCommandEventArgs e) 
      {
         SortExpression = e.SortExpression.ToString();
         ItemsGrid.DataSource = CreateDataSource();
         ItemsGrid.DataBind();
      }
 
   </script>
 
<body>
 
   <form runat="server">
 
      <h3>DataGrid Sorting Example</h3>
 
      <asp:DataGrid id="ItemsGrid" runat="server"
           BorderColor="black"
           BorderWidth="1"
           CellPadding="3"
           AllowSorting="true"
           OnSortCommand="Sort_Grid"
           HeaderStyle-BackColor="#00aaaa"
           AutoGenerateColumns="true"/>
 
   </form>
 
</body>
</html>

Siehe auch

Webserversteuerelemente | DataGrid-Klasse