DataSourceView Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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. |