방법: Windows Forms에서 데이터 탐색
Windows 응용 프로그램에서 데이터 소스의 레코드를 가장 손쉽게 탐색할 수 있는 방법은 BindingSource 구성 요소를 데이터 소스를 바인딩한 다음 컨트롤을 BindingSource에 바인딩하는 것입니다. 그런 다음 BindingSource의 기본 제공 탐색 메서드(예: MoveNext, MoveLast, MovePrevious 및 MoveFirst)를 사용할 수 있습니다. 이러한 메서드를 사용하면 BindingSource의 Position 및 Current 속성을 조정할 수 있습니다. 또한 항목을 찾은 다음 Position 속성을 설정하여 해당 항목을 현재 항목으로 설정할 수 있습니다.
데이터 소스 내에서의 위치를 증가시키려면
바인딩된 데이터에 대한 BindingSource의 Position 속성을 이동하려는 레코드 위치로 설정합니다. 다음 예제에서는 nextButton을 클릭할 때 BindingSource의 MoveNext 메서드를 사용하여 Position 속성을 증가시키는 방법을 보여 줍니다. BindingSource는 Northwind 데이터 집합의 Customers 테이블과 관련되어 있습니다.
참고
.NET Framework에서는 목록 범위를 벗어나는 값으로 위치를 설정할 수 없도록 하기 때문에 Position 속성을 첫 번째 또는 마지막 레코드를 벗어나는 값으로 설정해도 오류가 발생하지 않습니다. 응용 프로그램에서 첫 번째 또는 마지막 레코드를 지나쳤는지 여부를 인식하는 것이 중요하다면 데이터 요소 개수를 초과할지 여부를 테스트하는 논리를 포함해야 합니다.
Private Sub nextButton_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles nextButton.Click Me.customersBindingSource.MoveNext() End Sub
private void nextButton_Click(object sender, System.EventArgs e) { this.customersBindingSource.MoveNext(); }
레코드의 시작 또는 끝을 지나쳤는지 여부를 확인하려면
PositionChanged 이벤트에 대한 이벤트 처리기를 만듭니다. 이 처리기에서 제시된 위치 값이 실제 데이터 요소 개수를 초과했는지 여부를 테스트할 수 있습니다.
다음 예제에서는 마지막 데이터 요소에 도달했는지 여부를 테스트하는 방법을 보여 줍니다. 이 예제에서는 마지막 요소에 있을 경우 폼에 있는 다음 단추가 비활성화됩니다.
참고
코드에서 탐색 중인 목록을 변경해야 할 경우에는 다음 단추를 다시 활성화하여 사용자가 새 목록 전체를 찾아볼 수 있도록 하는 것이 중요합니다. 또한 사용하고 있는 특정 BindingSource에 대해 위의 PositionChanged 이벤트가 해당 이벤트 처리 메서드와 연결되어야 합니다. 다음은 PositionChanged 이벤트를 처리하는 메서드의 예제입니다.
Sub customersBindingSource_PositionChanged(ByVal sender As Object, _ ByVal e As EventArgs) If customersBindingSource.Position = _ customersBindingSource.Count - 1 Then nextButton.Enabled = False Else nextButton.Enabled = True End If End Sub
void customersBindingSource_PositionChanged(object sender, EventArgs e) { if (customersBindingSource.Position == customersBindingSource.Count - 1) nextButton.Enabled = false; else nextButton.Enabled = true; }
항목을 찾아서 현재 항목으로 설정하려면
현재 항목으로 설정하려는 레코드를 찾습니다. 데이터 소스에서 IBindingList를 구현하는 경우에는 BindingSource의 Find 메서드를 사용하여 이 작업을 수행할 수 있습니다. IBindingList를 구현하는 데이터 소스의 몇 가지 예로는 BindingList<T> 및 DataView가 있습니다.
Sub findButton_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles findButton.Click Dim foundIndex As Integer = customersBindingSource.Find("CustomerID", _ "ANTON") customersBindingSource.Position = foundIndex End Sub
void findButton_Click(object sender, EventArgs e) { int foundIndex = customersBindingSource.Find("CustomerID", "ANTON"); customersBindingSource.Position = foundIndex; }