DataTable의 Rows 컬렉션 및 Columns 컬렉션을 사용하여 콘텐츠에 액세스할 수 있습니다. 이 메서드를 Select 사용하여 검색 조건, 정렬 순서 및 행 상태를 비롯한 조건에 따라 데이터의 DataTable 하위 집합을 반환할 수도 있습니다. 또한 기본 키 값을 사용하여 특정 행을 검색할 때, DataRowCollection의 Find 메서드를 사용할 수 있습니다.
개체의 Select 메서드는 DataTable 지정된 조건과 일치하는 개체 집합 DataRow 을 반환합니다.
Select 는 필터 식, 정렬 식 및 DataViewRowState의 선택적 인수를 사용합니다. 필터 식은 DataColumn 값, 예를 들어 LastName = 'Smith'와 같은 값을 기준으로 반환할 행을 식별합니다. 정렬 식은 열 순서 지정에 대한 표준 SQL 규칙을 따릅니다. 예를 들면 다음과 같습니다 LastName ASC, FirstName ASC. 식을 작성하는 방법에 대한 규칙은 클래스의 ExpressionDataColumn 속성을 참조하세요.
팁 (조언)
Select 메서드에 대한 여러 호출을 수행하는 경우 먼저 DataView에 대한 호출을 만들어 성능을 높일 수 있습니다. 테이블 행의 DataView 인덱스를 만듭니다. 그런 다음 메서드는 Select 해당 인덱스로 쿼리 결과를 생성하는 시간을 크게 줄입니다.
DataView을(를) 위한 DataTable 생성 정보는 DataViews를 참조하세요.
메서드는 Select 에 따라 DataViewRowState보거나 조작할 행의 버전을 결정합니다. 다음 표에서는 가능한 DataViewRowState 열거형 값을 설명합니다.
| DataViewRowState 값 | 설명 |
|---|---|
| CurrentRows | 변경되지 않은 행, 추가된 행 및 수정된 행을 포함한 현재 행입니다. |
| 삭제됨 | 삭제된 행입니다. |
| ModifiedCurrent | 원래 데이터의 수정된 버전인 현재 버전입니다. ( ModifiedOriginal 참조) |
| ModifiedOriginal | 수정된 모든 행의 원래 버전입니다. 현재 버전은 ModifiedCurrent를 사용하여 사용할 수 있습니다. |
| 추가 | 새 행입니다. |
| 없음 | 없음. |
| OriginalRows | 변경되지 않은 행과 삭제된 행을 포함한 원래 행입니다. |
| 변경되지 않음 | 변경되지 않은 행입니다. |
다음 예제에서는 DataSet 객체를 필터링하여 DataViewRowState로 설정된 행만 작업하게 합니다.
Dim column As DataColumn
Dim row As DataRow
Dim currentRows() As DataRow = _
workTable.Select(Nothing, Nothing, DataViewRowState.CurrentRows)
If (currentRows.Length < 1 ) Then
Console.WriteLine("No Current Rows Found")
Else
For Each column in workTable.Columns
Console.Write(vbTab & column.ColumnName)
Next
Console.WriteLine(vbTab & "RowState")
For Each row In currentRows
For Each column In workTable.Columns
Console.Write(vbTab & row(column).ToString())
Next
Dim rowState As String = _
System.Enum.GetName(row.RowState.GetType(), row.RowState)
Console.WriteLine(vbTab & rowState)
Next
End If
DataRow[] currentRows = workTable.Select(
null, null, DataViewRowState.CurrentRows);
if (currentRows.Length < 1 )
Console.WriteLine("No Current Rows Found");
else
{
foreach (DataColumn column in workTable.Columns)
Console.Write("\t{0}", column.ColumnName);
Console.WriteLine("\tRowState");
foreach (DataRow row in currentRows)
{
foreach (DataColumn column in workTable.Columns)
Console.Write("\t{0}", row[column]);
Console.WriteLine("\t" + row.RowState);
}
}
Select 메서드를 사용하여 RowState 값 또는 필드 값이 다른 행을 반환할 수 있습니다. 다음 예제에서는 삭제된 모든 행을 참조하는 DataRow 배열을 반환하고, CustID 열이 5보다 큰 경우 CustLName으로 정렬된 모든 행을 참조하는 또 다른 DataRow 배열을 반환합니다. 행의 정보를 Deleted 보는 방법에 대한 자세한 내용은 행 상태 및 행 버전을 참조하세요.
' Retrieve all deleted rows.
Dim deletedRows() As DataRow = workTable.Select(Nothing, Nothing, DataViewRowState.Deleted)
' Retrieve rows where CustID > 5, and order by CustLName.
Dim custRows() As DataRow = workTable.Select( _
"CustID > 5", "CustLName ASC")
// Retrieve all deleted rows.
DataRow[] deletedRows = workTable.Select(
null, null, DataViewRowState.Deleted);
// Retrieve rows where CustID > 5, and order by CustLName.
DataRow[] custRows = workTable.Select("CustID > 5", "CustLName ASC");