Interfaccia IDataItemContainer (System.Web.UI)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Interfaccia IDataItemContainer
Il presente articolo è stato tradotto manualmente. Per visualizzare questa pagina e contemporaneamente visualizzarne il contenuto in lingua inglese, passare alla visualizzazione semplificata.

Consente ai contenitori di controlli con associazione a dati di identificare un oggetto dati per semplificare le operazioni di associazione dati.

Spazio dei nomi:  System.Web.UI
Assembly:  System.Web (in System.Web.dll)
Sintassi

Visual Basic
Public Interface IDataItemContainer _
	Inherits INamingContainer
C#
public interface IDataItemContainer : INamingContainer
Visual C++
public interface class IDataItemContainer : INamingContainer
F#
type IDataItemContainer =  
    interface
        interface INamingContainer
    end

Il tipo IDataItemContainer espone i seguenti membri.

Proprietà

  Nome Descrizione
Proprietà pubblica DataItem Se implementata, ottiene un elemento object utilizzato nelle operazioni semplificate di associazione dati.
Proprietà pubblica DataItemIndex Se implementata, ottiene l'indice dell'elemento di dati associato a un controllo.
Proprietà pubblica DisplayIndex Se implementata, ottiene la posizione dell'elemento di dati visualizzato in un controllo.
In alto
Metodi di estensione

  Nome Descrizione
Metodo di estensione pubblico EnableDynamicData(Type) Sottoposto a overload. Abilita il comportamento dati dinamici per il controllo dei dati specificato. (Definito da DataControlExtensions).
Metodo di estensione pubblico EnableDynamicData(Type, Object) Sottoposto a overload. Abilita il comportamento dati dinamici per il controllo dei dati specificato. (Definito da DataControlExtensions).
Metodo di estensione pubblico EnableDynamicData(Type, IDictionary<String, Object>) Sottoposto a overload. Abilita il comportamento dati dinamici per il controllo dei dati specificato. (Definito da DataControlExtensions).
Metodo di estensione pubblico GetDefaultValues Ottiene l'insieme di valori predefiniti per il controllo dei dati specificato. (Definito da DynamicDataExtensions).
Metodo di estensione pubblico GetMetaTable Ottiene i metadati della tabella per il controllo dei dati specificato. (Definito da DynamicDataExtensions).
Metodo di estensione pubblico SetMetaTable(MetaTable) Sottoposto a overload. Imposta i metadati della tabella per il controllo dei dati specificato. (Definito da DynamicDataExtensions).
Metodo di estensione pubblico SetMetaTable(MetaTable, IDictionary<String, Object>) Sottoposto a overload. Imposta il mapping dei valori predefiniti e dei metadati della tabella per il controllo dei dati specificato. (Definito da DynamicDataExtensions).
Metodo di estensione pubblico SetMetaTable(MetaTable, Object) Sottoposto a overload. Imposta il mapping dei valori predefiniti e dei metadati della tabella per il controllo dei dati specificato. (Definito da DynamicDataExtensions).
Metodo di estensione pubblico TryGetMetaTable Determina se sono disponibili i metadati della tabella. (Definito da DynamicDataExtensions).
In alto
Note

Le classi contenitore che implementano l'interfaccia IDataItemContainer possono specificare quale delle proprie proprietà identifica l'elemento di dati per le operazioni di associazione dati, ad esempio l'associazione tardiva con la classe DataBinder.

Esempi

Nell'esempio di codice riportato di seguito viene illustrato come utilizzare l'interfaccia IDataItemContainer. SimpleSpreadsheetControl è un controllo che visualizza i dati in formato tabella, in modo analogo al controllo DataGrid o GridView. Contiene un insieme di oggetti SimpleSpreadsheetRow.

La classe SimpleSpreadsheetRow è una classe contenitore che implementa l'interfaccia IDataItemContainer. Sebbene in questo esempio la proprietà dell'elemento di dati sia stata denominata Data, è possibile implementare la proprietà DataItem per eseguire il mapping con qualsiasi proprietà o per restituire il valore di un metodo.

Visual Basic

Imports System
Imports System.Collections
Imports System.Data.Common
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace Samples.AspNet.VB

    Public Class SimpleSpreadsheetControl
        Inherits CompositeDataBoundControl

        Protected table As New Table()

        Public Overridable ReadOnly Property Rows() As TableRowCollection
            Get
                Return table.Rows
            End Get
        End Property


        Protected Overrides Function CreateChildControls(ByVal dataSource As IEnumerable, ByVal dataBinding As Boolean) As Integer

            Dim count As Integer = 0
            ' If dataSource is not Nothing, iterate through it and
            ' extract each element from it as a row, then
            ' create a SimpleSpreadsheetRow and add it to the
            ' rows collection.
            If Not (dataSource Is Nothing) Then

                Dim row As SimpleSpreadsheetRow
                Dim e As IEnumerator = dataSource.GetEnumerator()

                While e.MoveNext()
                    Dim datarow As Object = e.Current
                    row = New SimpleSpreadsheetRow(count, datarow)
                    Me.Rows.Add(row)
                    count += 1
                End While

                Controls.Add(table)
            End If
            Return count
        End Function 'CreateChildControls
    End Class 'SimpleSpreadsheetControl


    Public Class SimpleSpreadsheetRow
        Inherits TableRow
        Implements IDataItemContainer

        Private dataObj As Object
        Private _itemIndex As Integer

        Public Sub New(ByVal itemIndex As Integer, ByVal o As Object)
            dataObj = o
            _itemIndex = itemIndex
        End Sub 'New

        Public Overridable ReadOnly Property Data() As Object
            Get
                Return dataObj
            End Get
        End Property

        ReadOnly Property DataItem() As Object Implements IDataItemContainer.DataItem
            Get
                Return Data
            End Get
        End Property

        ReadOnly Property DataItemIndex() As Integer Implements IDataItemContainer.DataItemIndex
            Get
                Return _itemIndex
            End Get
        End Property

        ReadOnly Property DisplayIndex() As Integer Implements IDataItemContainer.DisplayIndex
            Get
                Return _itemIndex
            End Get
        End Property
        Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)

            If Not (Data Is Nothing) Then
                If TypeOf Data Is System.Data.Common.DbDataRecord Then
                    Dim temp As DbDataRecord = CType(Data, DbDataRecord)
                    Dim i As Integer

                    While i < temp.FieldCount
                        writer.Write("<TD>")
                        writer.Write(temp.GetValue(i).ToString())
                        writer.Write("</TD>")
                        i += 1
                    End While
                Else
                    writer.Write(("<TD>" + Data.ToString() + "</TD>"))
                End If

            Else
                writer.Write("<TD>This is a test</TD>")
            End If
        End Sub 'RenderContents
    End Class 'SimpleSpreadsheetRow
End Namespace


C#

using System;
using System.Collections;
using System.Data.Common;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Samples.AspNet.CS
{
    public class SimpleSpreadsheetControl : CompositeDataBoundControl
    {
        protected Table table = new Table();

        public virtual TableRowCollection Rows
        {
            get
            {
                return table.Rows;
            }
        }

        protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
        {

            int count = 0;
            // If dataSource is not null, iterate through it and
            // extract each element from it as a row, then
            // create a SimpleSpreadsheetRow and add it to the
            // rows collection.
            if (dataSource != null)
            {

                SimpleSpreadsheetRow row;
                IEnumerator e = dataSource.GetEnumerator();

                while (e.MoveNext())
                {
                    object datarow = e.Current;
                    row = new SimpleSpreadsheetRow(count, datarow);
                    this.Rows.Add(row);
                    ++count;
                }

                Controls.Add(table);
            }
            return count;
        }
    }

    //
    //
    public class SimpleSpreadsheetRow : TableRow, IDataItemContainer
    {
        private object data;
        private int _itemIndex;

        public SimpleSpreadsheetRow(int itemIndex, object o)
        {
            data = o;
            _itemIndex = itemIndex;
        }

        public virtual object Data
        {
            get
            {
                return data;
            }
        }
        object IDataItemContainer.DataItem
        {
            get
            {
                return Data;
            }
        }
        int IDataItemContainer.DataItemIndex
        {
            get
            {
                return _itemIndex;
            }
        }
        int IDataItemContainer.DisplayIndex
        {
            get
            {
                return _itemIndex;
            }
        }
        protected override void RenderContents(HtmlTextWriter writer)
        {

            if (Data != null)
            {
                if (Data is System.Data.Common.DbDataRecord)
                {
                    DbDataRecord temp = (DbDataRecord)Data;
                    for (int i = 0; i < temp.FieldCount; ++i)
                    {
                        writer.Write("<TD>");
                        writer.Write(temp.GetValue(i).ToString());
                        writer.Write("</TD>");
                    }
                }
                else
                    writer.Write("<TD>" + Data.ToString() + "</TD>");
            }

            else
                writer.Write("<TD>This is a test</TD>");
        }
    }
}


Nell'esempio di codice riportato di seguito viene illustrato come utilizzare i controlli SimpleSpreadsheetControl e AccessDataSource per visualizzare i dati di un database di Access.

Visual Basic

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB"
    Assembly="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<!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>
    <title>IDataItemContainer - VB Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

      <aspSample:SimpleSpreadsheetControl
          id="SimpleSpreadsheet1"
          runat="server"
          datasourceid="AccessDataSource1" />

      <asp:accessdatasource
          id="AccessDataSource1"
          runat="server"
          datasourcemode="DataReader"
          datafile="Northwind.mdb"
          SelectCommand="SELECT OrderID,CustomerID,OrderDate,RequiredDate,ShippedDate
          FROM Orders WHERE EmployeeID =
          (SELECT EmployeeID FROM Employees WHERE LastName = 'King')">
      </asp:accessdatasource>

    </form>
  </body>
</html>


C#

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS"
    Assembly="Samples.AspNet.CS"  %>
<%@ Page language="c#" %>
<!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>
    <title>IDataItemContainer - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

      <aspSample:SimpleSpreadsheetControl
          id="SimpleSpreadsheet1"
          runat="server"
          datasourceid="AccessDataSource1" />

      <asp:accessdatasource
          id="AccessDataSource1"
          runat="server"
          datasourcemode="DataReader"
          datafile="Northwind.mdb"
          SelectCommand="SELECT OrderID,CustomerID,OrderDate,RequiredDate,
          ShippedDate FROM Orders WHERE EmployeeID = (SELECT EmployeeID 
          FROM Employees WHERE LastName = 'King')">
      </asp:accessdatasource>

    </form>
  </body>
</html>


Informazioni sulla versione

.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0
Piattaforme

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Vedere anche

Riferimenti