Partager via


DataSourceView.ExecuteSelect(DataSourceSelectArguments) Méthode

Définition

Obtient une liste de données du stockage des données sous-jacent.

protected public:
 abstract System::Collections::IEnumerable ^ ExecuteSelect(System::Web::UI::DataSourceSelectArguments ^ arguments);
protected internal abstract System.Collections.IEnumerable ExecuteSelect (System.Web.UI.DataSourceSelectArguments arguments);
abstract member ExecuteSelect : System.Web.UI.DataSourceSelectArguments -> System.Collections.IEnumerable
Protected Friend MustOverride Function ExecuteSelect (arguments As DataSourceSelectArguments) As IEnumerable

Paramètres

arguments
DataSourceSelectArguments

DataSourceSelectArguments utilisé pour demander des opérations sur les données, autres que la récupération des données de base.

Retours

Liste de données IEnumerable issue du stockage des données sous-jacent.

Exemples

L’exemple de code suivant montre comment remplacer la ExecuteSelect méthode dans une classe qui étend la DataSourceView classe . Ouvre CsvDataSourceView un fichier de valeurs séparées par des virgules (.csv), l’analyse ligne par ligne et crée un DataTable objet et un DataView objet pour conserver les données en mémoire. Enfin, une expression de tri est appliquée si une expression est fournie par l’objet DataSourceSelectArguments et si l’objet DataView est retourné en tant que IEnumerable instance. Cet exemple de code fait partie d’un exemple plus grand fourni pour la DataSourceView classe .

// 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;
}
' 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

Remarques

La ExecuteSelect méthode est appelée pour récupérer des données du magasin de données sous-jacent et les retourner en tant qu’objet IEnumerable . Tous les contrôles de source de données prennent en charge la récupération des données à partir de leur stockage de données sous-jacent, même si d’autres opérations telles que l’insertion et le tri ne sont pas prises en charge. Étant donné qu’un contrôle lié aux données peut demander une liste de données à tout moment à la suite d’un DataSourceChanged événement ou d’un DataBind appel de méthode, la récupération des données doit être effectuée à la demande.

S’applique à

Voir aussi