IDataItemContainer Interfejs

Definicja

Umożliwia kontenerom sterowania powiązanym z danymi identyfikowanie obiektu elementu danych na potrzeby uproszczonych operacji wiązania danych.

C#
public interface IDataItemContainer : System.Web.UI.INamingContainer
Pochodne
Implementuje

Przykłady

W poniższym przykładzie kodu pokazano, jak używać interfejsu IDataItemContainer . Jest to kontrolka SimpleSpreadsheetControl , która wyświetla dane w stylu tabelarycznym, podobnie jak kontrolka DataGrid lub GridView . Zawiera zestaw SimpleSpreadsheetRow obiektów.

Klasa SimpleSpreadsheetRow jest klasą kontenera, która implementuje IDataItemContainer interfejs. Chociaż w tym przykładzie właściwość elementu danych ma intuicyjną nazwę Data, DataItem właściwość można zaimplementować do mapowania na dowolną właściwość lub wartość zwracaną metody.

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>");
            }
        }
    }
}

W poniższym przykładzie kodu pokazano, jak używać kontrolki SimpleSpreadsheetControl i AccessDataSource do wyświetlania danych w bazie danych programu Access.

ASP.NET (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>

Uwagi

Klasy kontenerów, które implementują IDataItemContainer interfejs, mogą określać, które z ich właściwości identyfikują element danych dla operacji powiązania danych, takie jak późne powiązanie z klasą DataBinder .

Właściwości

DataItem

Po zaimplementowaniu program pobiera element object , który jest używany w uproszczonych operacjach wiązania danych.

DataItemIndex

Po zaimplementowaniu pobiera indeks elementu danych powiązany z kontrolką.

DisplayIndex

Po zaimplementowaniu pobiera pozycję elementu danych, jak pokazano w kontrolce.

Metody rozszerzania

GetDefaultValues(INamingContainer)

Pobiera kolekcję wartości domyślnych dla określonej kontrolki danych.

GetMetaTable(INamingContainer)

Pobiera metadane tabeli dla określonej kontrolki danych.

SetMetaTable(INamingContainer, MetaTable)

Ustawia metadane tabeli dla określonej kontrolki danych.

SetMetaTable(INamingContainer, MetaTable, IDictionary<String,Object>)

Ustawia metadane tabeli i domyślne mapowanie wartości dla określonej kontrolki danych.

SetMetaTable(INamingContainer, MetaTable, Object)

Ustawia metadane tabeli i domyślne mapowanie wartości dla określonej kontrolki danych.

TryGetMetaTable(INamingContainer, MetaTable)

Określa, czy metadane tabeli są dostępne.

EnableDynamicData(INamingContainer, Type)

Włącza zachowanie danych dynamicznych dla określonej kontrolki danych.

EnableDynamicData(INamingContainer, Type, IDictionary<String,Object>)

Włącza zachowanie danych dynamicznych dla określonej kontrolki danych.

EnableDynamicData(INamingContainer, Type, Object)

Włącza zachowanie danych dynamicznych dla określonej kontrolki danych.

Dotyczy

Produkt Wersje
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Zobacz też