다음을 통해 공유


DataView를 사용하여 정렬(LINQ to DataSet)

특정 기준에 따라 데이터를 정렬한 다음 UI 컨트롤을 통해 클라이언트에 데이터를 표시하는 기능은 데이터 바인딩의 중요한 측면입니다. DataView 는 데이터를 정렬하고 특정 순서 기준에 따라 정렬된 데이터 행을 반환하는 여러 가지 방법을 제공합니다. 문자열 기반 정렬 기능 DataView 외에도 정렬 조건에 LINQ(Language-Integrated Query) 식을 사용할 수 있습니다. LINQ 식을 사용하면 문자열 기반 정렬보다 훨씬 더 복잡하고 강력한 정렬 작업을 수행할 수 있습니다. 이 항목에서는 을 사용하여 정렬하는 두 가지 방법에 대해 설명합니다 DataView.

정렬 정보를 사용하여 쿼리에서 DataView 만들기

DataView LINQ to DataSet 쿼리에서 개체를 만들 수 있습니다. OrderBy, OrderByDescending, ThenBy, 또는 ThenByDescending 절이 쿼리에 포함된 경우, 이러한 절의 식은 DataView 데이터의 정렬 기준으로 사용됩니다. 예를 들어 쿼리에 Order By…Then By… 절이 포함된 경우, 결과 DataView가 지정된 두 열에 따라 데이터를 정렬합니다.

식 기반 정렬은 더 간단한 문자열 기반 정렬보다 더 강력하고 복잡한 정렬을 제공합니다. 문자열 기반 및 식 기반 정렬은 상호 배타적입니다. 쿼리에서 문자열 기반 Sort 이 만들어진 후에 DataView 설정되면 쿼리에서 유추된 식 기반 필터가 지워지고 다시 설정할 수 없습니다.

DataView가 생성될 때와 정렬 또는 필터링 정보가 수정될 때 인덱스가 모두 빌드됩니다. LINQ to DataSet 쿼리 DataView 에서 정렬 조건을 제공하고 나중에 정렬 정보를 수정하지 않고 최상의 성능을 얻을 수 있습니다. 자세한 내용은 DataView 성능을 참조하세요.

비고

대부분의 경우 정렬에 사용되는 식에는 부작용이 없어야 하며 결정적이어야 합니다. 또한 정렬 작업이 여러 번 실행될 수 있으므로 식에는 설정된 실행 수에 따라 달라지는 논리가 포함되어서는 안 됩니다.

예시

다음 예제에서는 SalesOrderHeader 테이블을 쿼리하고 반환된 행을 주문 날짜로 정렬합니다. 그런 다음 해당 쿼리에서 DataView를 생성하고, DataViewBindingSource에 바인딩합니다.

DataTable orders = _dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
                                         orderby order.Field<DateTime>("OrderDate")
                                         select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")

Dim query = _
    From order In orders.AsEnumerable() _
    Order By order.Field(Of DateTime)("OrderDate") _
    Select order

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view

예시

다음 예제에서는 SalesOrderHeader 테이블을 쿼리하고 반환된 행을 총 지불 금액에 따라 정렬합니다. 그런 다음 해당 쿼리에서 DataView를 만들고 DataViewBindingSource에 바인딩합니다.

DataTable orders = _dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query =
    from order in orders.AsEnumerable()
    orderby order.Field<decimal>("TotalDue")
    select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")

Dim query = _
    From order In orders.AsEnumerable() _
    Order By order.Field(Of Decimal)("TotalDue") _
    Select order

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view

예시

다음 예제에서는 SalesOrderDetail 테이블을 쿼리하고 주문 수량 및 판매 주문 ID별로 반환된 행을 정렬합니다. 그런 다음 해당 쿼리에서 DataView를 만들고, DataViewBindingSource에 바인딩합니다.

DataTable orders = _dataSet.Tables["SalesOrderDetail"];

EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
                                         orderby order.Field<short>("OrderQty"), order.Field<int>("SalesOrderID")
                                         select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

Dim orders As DataTable = dataSet.Tables("SalesOrderDetail")

Dim query = _
    From order In orders.AsEnumerable() _
    Order By order.Field(Of Int16)("OrderQty"), order.Field(Of Integer)("SalesOrderID") _
    Select order

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view

String-Based Sort 속성 사용

문자열 기반 정렬 기능은 DataView LINQ to DataSet에서 계속 작동합니다. LINQ to DataSet 쿼리에서 DataView이(가) 생성된 후에는 Sort 속성을 사용하여 DataView의 정렬을 설정할 수 있습니다.

문자열 기반 및 식 기반 정렬 기능은 상호 배타적입니다. Sort 속성을 설정하면, DataView에서 생성된 쿼리로부터 상속된 식 기반 정렬이 지워집니다.

문자열 기반 Sort 필터링에 대한 자세한 내용은 데이터 정렬 및 필터링을 참조하세요.

예시

다음 예제에서는 연락처 테이블에서 DataView를 생성하고, 행을 성에 따라 내림차순으로 정렬한 다음 이름에 따라 오름차순으로 정렬합니다.

DataTable contacts = _dataSet.Tables["Contact"];

DataView view = contacts.AsDataView();

view.Sort = "LastName desc, FirstName asc";

bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();
Dim contacts As DataTable = dataSet.Tables("Contact")

Dim view As DataView = contacts.AsDataView()

view.Sort = "LastName desc, FirstName asc"

bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()

예시

다음 예제에서는 연락처 테이블에서 성이 문자 "S"로 시작하는 항목을 조회합니다. A DataView 는 해당 쿼리에서 만들어지고 BindingSource 개체에 연결됩니다.

DataTable contacts = _dataSet.Tables["Contact"];

EnumerableRowCollection<DataRow> query = from contact in contacts.AsEnumerable()
                                         where contact.Field<string>("LastName").StartsWith("S")
                                         select contact;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

view.Sort = "LastName desc, FirstName asc";
Dim contacts As DataTable = dataSet.Tables("Contact")

Dim query = _
    From contact In contacts.AsEnumerable() _
    Where contact.Field(Of String)("LastName").StartsWith("S") _
    Select contact

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
view.Sort = "LastName desc, FirstName asc"

정렬 초기화

DataView의 정렬 정보는 Sort 속성을 사용하여 설정한 후 지울 수 있습니다. 다음 두 가지 방법으로 정렬 정보를 지울 수 있습니다.DataView

  • Sort 속성을 null으로 설정합니다.

  • Sort 속성을 빈 문자열로 설정합니다.

예시

다음 예제에서는 쿼리에서 DataView를 생성하고 Sort 속성을 빈 문자열로 설정하여 정렬을 지웁니다.

DataTable orders = _dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
                                         orderby order.Field<decimal>("TotalDue")
                                         select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

view.Sort = "";
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")

Dim query = _
    From order In orders.AsEnumerable() _
    Order By order.Field(Of Decimal)("TotalDue") _
    Select order

Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
view.Sort = ""

예시

다음 예제에서는 연락처 테이블에서 DataView을 만들고 속성을 설정하여 Sort가 성을 기준으로 내림차순으로 정렬되도록 합니다. 속성 Sortnull로 설정하여 정렬 정보가 지워집니다.

DataTable contacts = _dataSet.Tables["Contact"];

DataView view = contacts.AsDataView();

view.Sort = "LastName desc";

bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();

// Clear the sort.
view.Sort = null;
Dim contacts As DataTable = dataSet.Tables("Contact")

Dim view As DataView = contacts.AsDataView()
view.Sort = "LastName desc"

bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()

'Clear the sort.
view.Sort = Nothing

참고하십시오