Sdílet prostřednictvím


DataSourceView Třída

Definice

Slouží jako základní třída pro všechny třídy zobrazení zdroje dat, které definují možnosti ovládacích prvků zdroje dat.

public ref class DataSourceView abstract
public abstract class DataSourceView
type DataSourceView = class
Public MustInherit Class DataSourceView
Dědičnost
DataSourceView
Odvozené

Příklady

Následující příklad kódu ukazuje, jak rozšířit DataSourceView třídu o vytvoření třídy zobrazení silného typu pro ovládací prvek zdroje dat. Třída CsVDataSourceView definuje možnosti CsvDataSource ovládacího prvku zdroje dat a poskytuje implementaci pro ovládací prvky vázané na data, které používají data uložená v souborech s hodnotami oddělenými čárkami (.csv). Další informace o ovládacím CsvDataSource prvku zdroje dat najdete ve DataSourceControl třídě .

// The CsvDataSourceView class encapsulates the
// capabilities of the CsvDataSource data source control.
public class CsvDataSourceView : DataSourceView
{

    public CsvDataSourceView(IDataSource owner, string name) :base(owner, DefaultViewName) {
    }

    // The data source view is named. However, the CsvDataSource
    // only supports one view, so the name is ignored, and the
    // default name used instead.
    public static string DefaultViewName = "CommaSeparatedView";

    // The location of the .csv file.
    private string sourceFile = String.Empty;
    internal string SourceFile {
        get {
            return sourceFile;
        }
        set {
            // Use MapPath when the SourceFile is set, so that files local to the
            // current directory can be easily used.
            string mappedFileName = HttpContext.Current.Server.MapPath(value);
            sourceFile = mappedFileName;
        }
    }

    // Do not add the column names as a data row. Infer columns if the CSV file does
    // not include column names.
    private bool columns = false;
    internal bool IncludesColumnNames {
        get {
            return columns;
        }
        set {
            columns = value;
        }
    }

    // Get data from the underlying data source.
    // Build and return a DataView, regardless of mode.
    protected override IEnumerable ExecuteSelect(DataSourceSelectArguments selectArgs) {
        IEnumerable dataList = null;
        // Open the .csv file.
        if (File.Exists(this.SourceFile)) {
            DataTable data = new DataTable();

            // Open the file to read from.
            using (StreamReader sr = File.OpenText(this.SourceFile)) {
                // Parse the line
                string s = "";
                string[] dataValues;
                DataColumn col;

                // Do the following to add schema.
                dataValues = sr.ReadLine().Split(',');
                // For each token in the comma-delimited string, add a column
                // to the DataTable schema.
                foreach (string token in dataValues) {
                    col = new DataColumn(token,typeof(string));
                    data.Columns.Add(col);
                }

                // Do not add the first row as data if the CSV file includes column names.
                if (! IncludesColumnNames)
                    data.Rows.Add(CopyRowData(dataValues, data.NewRow()));

                // Do the following to add data.
                while ((s = sr.ReadLine()) != null) {
                    dataValues = s.Split(',');
                    data.Rows.Add(CopyRowData(dataValues, data.NewRow()));
                }
            }
            data.AcceptChanges();
            DataView dataView = new DataView(data);
            if (!string.IsNullOrEmpty(selectArgs.SortExpression)) {
                dataView.Sort = selectArgs.SortExpression;
            }
            dataList = dataView;
        }
        else {
            throw new System.Configuration.ConfigurationErrorsException("File not found, " + this.SourceFile);
        }

        if (null == dataList) {
            throw new InvalidOperationException("No data loaded from data source.");
        }

        return dataList;
    }

    private DataRow CopyRowData(string[] source, DataRow target) {
        try {
            for (int i = 0;i < source.Length;i++) {
                target[i] = source[i];
            }
        }
        catch (System.IndexOutOfRangeException) {
            // There are more columns in this row than
            // the original schema allows.  Stop copying
            // and return the DataRow.
            return target;
        }
        return target;
    }
    // The CsvDataSourceView does not currently
    // permit deletion. You can modify or extend
    // this sample to do so.
    public override bool CanDelete {
        get {
            return false;
        }
    }
    protected override int ExecuteDelete(IDictionary keys, IDictionary values)
    {
        throw new NotSupportedException();
    }
    // The CsvDataSourceView does not currently
    // permit insertion of a new record. You can
    // modify or extend this sample to do so.
    public override bool CanInsert {
        get {
            return false;
        }
    }
    protected override int ExecuteInsert(IDictionary values)
    {
        throw new NotSupportedException();
    }
    // The CsvDataSourceView does not currently
    // permit update operations. You can modify or
    // extend this sample to do so.
    public override bool CanUpdate {
        get {
            return false;
        }
    }
    protected override int ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues)
    {
        throw new NotSupportedException();
    }
}
' The CsvDataSourceView class encapsulates the
' capabilities of the CsvDataSource data source control.

Public Class CsvDataSourceView
   Inherits DataSourceView

   Public Sub New(owner As IDataSource, name As String)
       MyBase.New(owner, DefaultViewName)
   End Sub

   ' The data source view is named. However, the CsvDataSource
   ' only supports one view, so the name is ignored, and the
   ' default name used instead.
   Public Shared DefaultViewName As String = "CommaSeparatedView"

   ' The location of the .csv file.
   Private aSourceFile As String = [String].Empty

   Friend Property SourceFile() As String
      Get
         Return aSourceFile
      End Get
      Set
         ' Use MapPath when the SourceFile is set, so that files local to the
         ' current directory can be easily used.
         Dim mappedFileName As String
         mappedFileName = HttpContext.Current.Server.MapPath(value)
         aSourceFile = mappedFileName
      End Set
   End Property

   ' Do not add the column names as a data row. Infer columns if the CSV file does
   ' not include column names.
   Private columns As Boolean = False

   Friend Property IncludesColumnNames() As Boolean
      Get
         Return columns
      End Get
      Set
         columns = value
      End Set
   End Property

   ' Get data from the underlying data source.
   ' Build and return a DataView, regardless of mode.
   Protected Overrides Function ExecuteSelect(selectArgs As DataSourceSelectArguments) _
    As System.Collections.IEnumerable
      Dim dataList As IEnumerable = Nothing
      ' Open the .csv file.
      If File.Exists(Me.SourceFile) Then
         Dim data As New DataTable()

         ' Open the file to read from.
         Dim sr As StreamReader = File.OpenText(Me.SourceFile)

         Try
            ' Parse the line
            Dim dataValues() As String
            Dim col As DataColumn

            ' Do the following to add schema.
            dataValues = sr.ReadLine().Split(","c)
            ' For each token in the comma-delimited string, add a column
            ' to the DataTable schema.
            Dim token As String
            For Each token In dataValues
               col = New DataColumn(token, System.Type.GetType("System.String"))
               data.Columns.Add(col)
            Next token

            ' Do not add the first row as data if the CSV file includes column names.
            If Not IncludesColumnNames Then
               data.Rows.Add(CopyRowData(dataValues, data.NewRow()))
            End If

            ' Do the following to add data.
            Dim s As String
            Do
               s = sr.ReadLine()
               If Not s Is Nothing Then
                   dataValues = s.Split(","c)
                   data.Rows.Add(CopyRowData(dataValues, data.NewRow()))
               End If
            Loop Until s Is Nothing

         Finally
            sr.Close()
         End Try

         data.AcceptChanges()
         Dim dataView As New DataView(data)
         If Not selectArgs.SortExpression Is String.Empty Then
             dataView.Sort = selectArgs.SortExpression
         End If
         dataList = dataView
      Else
         Throw New System.Configuration.ConfigurationErrorsException("File not found, " + Me.SourceFile)
      End If

      If dataList is Nothing Then
         Throw New InvalidOperationException("No data loaded from data source.")
      End If

      Return dataList
   End Function 'ExecuteSelect


   Private Function CopyRowData([source]() As String, target As DataRow) As DataRow
      Try
         Dim i As Integer
         For i = 0 To [source].Length - 1
            target(i) = [source](i)
         Next i
      Catch iore As IndexOutOfRangeException
         ' There are more columns in this row than
         ' the original schema allows.  Stop copying
         ' and return the DataRow.
         Return target
      End Try
      Return target
   End Function 'CopyRowData

   ' The CsvDataSourceView does not currently
   ' permit deletion. You can modify or extend
   ' this sample to do so.
   Public Overrides ReadOnly Property CanDelete() As Boolean
      Get
         Return False
      End Get
   End Property

   Protected Overrides Function ExecuteDelete(keys As IDictionary, values As IDictionary) As Integer
      Throw New NotSupportedException()
   End Function 'ExecuteDelete

   ' The CsvDataSourceView does not currently
   ' permit insertion of a new record. You can
   ' modify or extend this sample to do so.
   Public Overrides ReadOnly Property CanInsert() As Boolean
      Get
         Return False
      End Get
   End Property

   Protected Overrides Function ExecuteInsert(values As IDictionary) As Integer
      Throw New NotSupportedException()
   End Function 'ExecuteInsert

   ' The CsvDataSourceView does not currently
   ' permit update operations. You can modify or
   ' extend this sample to do so.
   Public Overrides ReadOnly Property CanUpdate() As Boolean
      Get
         Return False
      End Get
   End Property

   Protected Overrides Function ExecuteUpdate(keys As IDictionary, _
                                              values As IDictionary, _
                                              oldValues As IDictionary) As Integer
      Throw New NotSupportedException()
   End Function 'ExecuteUpdate

End Class

Poznámky

ASP.NET podporuje architekturu datových vazeb, která umožňuje ovládacím prvkům webového serveru svázat data konzistentním způsobem. Ovládací prvky webového serveru, které jsou vázány na data, se označují jako ovládací prvky vázané na data a třídy, které usnadňují vazbu, se nazývají ovládací prvky zdroje dat. Ovládací prvky zdroje dat můžou představovat libovolný zdroj dat: relační databázi, soubor, datový proud, obchodní objekt atd. Ovládací prvky zdroje dat prezentující data konzistentním způsobem ovládacím prvkům vázaným na data bez ohledu na zdroj nebo formát podkladových dat.

Ovládací prvky zdroje dat, které jsou součástí ASP.NET, včetně SqlDataSource, AccessDataSourcea XmlDataSource, slouží k provádění většiny úloh vývoje webu. Základní DataSourceControl a DataSourceView třídy použijete, když chcete implementovat vlastní správu zdrojů dat.

Ovládací prvek zdroje dat si můžete představit jako kombinaci objektu IDataSource a jeho přidružených seznamů dat, které se nazývají zobrazení zdrojů dat. Každý seznam dat je reprezentován objektem DataSourceView . Třída DataSourceView je základní třídou pro všechna zobrazení zdrojů dat neboli seznamy dat přidružené k ovládacím prvkům zdroje dat. Zobrazení zdrojů dat definují možnosti ovládacího prvku zdroje dat. Vzhledem k tomu, že podkladové úložiště dat obsahuje jeden nebo více seznamů dat, je ovládací prvek zdroje dat vždy přidružený k jednomu nebo několika pojmenovaným zobrazením zdroje dat. Ovládací prvek zdroje dat používá metodu GetViewNames k výčtu zobrazení zdroje dat, která jsou aktuálně přidružena k ovládacímu prvku zdroje dat, a metodu GetView k načtení konkrétní instance zobrazení zdroje dat podle názvu.

Všechny DataSourceView objekty podporují načítání dat z podkladového zdroje dat pomocí ExecuteSelect metody . Všechna zobrazení volitelně podporují základní sadu operací, včetně operací, jako ExecuteInsertjsou , ExecuteUpdatea ExecuteDelete. Ovládací prvek vázaný na data může zjistit možnosti ovládacího prvku zdroje dat načtením přidruženého zobrazení zdroje dat pomocí GetView metod a GetViewNames a dotazováním zobrazení v době návrhu nebo za běhu.

Konstruktory

DataSourceView(IDataSource, String)

Inicializuje novou instanci DataSourceView třídy.

Vlastnosti

CanDelete

Získá hodnotu označující, zda DataSourceView objekt přidružený k aktuálnímu DataSourceControl objektu ExecuteDelete(IDictionary, IDictionary) podporuje operaci.

CanInsert

Získá hodnotu označující, zda DataSourceView objekt přidružený k aktuálnímu DataSourceControl objektu ExecuteInsert(IDictionary) podporuje operaci.

CanPage

Získá hodnotu označující, zda DataSourceView objekt přidružený k aktuálnímu DataSourceControl objektu podporuje stránkování prostřednictvím dat načtených metodou ExecuteSelect(DataSourceSelectArguments) .

CanRetrieveTotalRowCount

Získá hodnotu označující, zda DataSourceView objekt přidružený k aktuálnímu DataSourceControl objektu podporuje načtení celkového počtu řádků dat místo dat.

CanSort

Získá hodnotu označující, zda DataSourceView objekt přidružený k aktuálnímu DataSourceControl objektu podporuje seřazené zobrazení v podkladovém zdroji dat.

CanUpdate

Získá hodnotu označující, zda DataSourceView objekt přidružený k aktuálnímu DataSourceControl objektu ExecuteUpdate(IDictionary, IDictionary, IDictionary) podporuje operaci.

Events

Získá seznam delegátů obslužné rutiny události pro zobrazení zdroje dat.

Name

Získá název zobrazení zdroje dat.

Metody

CanExecute(String)

Určuje, zda lze provést zadaný příkaz.

Delete(IDictionary, IDictionary, DataSourceViewOperationCallback)

Provede asynchronní operaci odstranění seznamu dat, která DataSourceView objekt představuje.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
ExecuteCommand(String, IDictionary, IDictionary, DataSourceViewOperationCallback)

Spustí zadaný příkaz.

ExecuteCommand(String, IDictionary, IDictionary)

Spustí zadaný příkaz.

ExecuteDelete(IDictionary, IDictionary)

Provede operaci odstranění seznamu dat, která DataSourceView objekt představuje.

ExecuteInsert(IDictionary)

Provede operaci vložení v seznamu dat, která DataSourceView objekt představuje.

ExecuteSelect(DataSourceSelectArguments)

Získá seznam dat z podkladového úložiště dat.

ExecuteUpdate(IDictionary, IDictionary, IDictionary)

Provede operaci aktualizace seznamu dat, která DataSourceView objekt představuje.

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
Insert(IDictionary, DataSourceViewOperationCallback)

Provede operaci asynchronního vložení v seznamu dat, která DataSourceView objekt představuje.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
OnDataSourceViewChanged(EventArgs)

DataSourceViewChanged Vyvolá událost.

RaiseUnsupportedCapabilityError(DataSourceCapabilities)

Volá metodu RaiseUnsupportedCapabilitiesError(DataSourceView) k porovnání možností požadovaných pro ExecuteSelect(DataSourceSelectArguments) operaci s možnostmi, které zobrazení podporuje.

Select(DataSourceSelectArguments, DataSourceViewSelectCallback)

Získá seznam dat asynchronně z podkladového úložiště dat.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
Update(IDictionary, IDictionary, IDictionary, DataSourceViewOperationCallback)

Provede asynchronní operaci aktualizace seznamu dat, která DataSourceView objekt představuje.

Událost

DataSourceViewChanged

Nastane při změně zobrazení zdroje dat.

Platí pro

Viz také