다음을 통해 공유


DataSourceView.ExecuteSelect(DataSourceSelectArguments) 메서드

정의

내부 데이터 스토리지에서 데이터 목록을 가져옵니다.

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

매개 변수

arguments
DataSourceSelectArguments

데이터에 대해 기본 데이터 검색 이상의 작업을 요청하는 데 사용되는 DataSourceSelectArguments입니다.

반환

내부 데이터 스토리지에서 가져온 데이터의 IEnumerable 목록입니다.

예제

다음 코드 예제에서는 재정의 하는 방법에 설명 합니다 ExecuteSelect 확장 하는 클래스의 메서드는 DataSourceView 클래스입니다. 합니다 CsvDataSourceView 쉼표로 구분 된 값 (.csv) 파일을 엽니다, 구문 분석 한 줄씩 만들고는 DataTable 개체 및 DataView 메모리에 데이터를 보관 하는 개체입니다. 제공 되는 경우는 정렬 식이 적용 되는 마지막으로, 합니다 DataSourceSelectArguments 개체 및 DataView 가 반환 되는 개체는 IEnumerable 인스턴스. 이 코드 예제는에 대해 제공 된 큰 예제의 일부는 DataSourceView 클래스입니다.

// 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

설명

합니다 ExecuteSelect 메서드는 내부 데이터 저장소에서 데이터를 검색 하 고 그대로 반환을 IEnumerable 개체입니다. 모든 데이터 원본 컨트롤은 삽입 및 정렬과 같은 다른 작업이 지원되지 않더라도 기본 데이터 스토리지에서 데이터 검색을 지원합니다. 데이터 바인딩된 컨트롤을 언제 든 지의 결과로 데이터 목록을 요청할 수 있으므로 한 DataSourceChanged 이벤트 또는 DataBind 메서드 호출에서 요청 시 데이터 검색을 수행 해야 합니다.

적용 대상

추가 정보