DataView의 도움으로 DataTable에 저장된 데이터에 대한 다양한 뷰를 만들 수 있습니다. 예를 들어 DataView를 통해 다양한 정렬 순서를 사용하여 DataTable의 데이터를 보거나 데이터 열 상태 또는 필터 식을 기반으로 DataTable의 데이터를 필터링할 수 있습니다. 중요한 점은 DataTable의 데이터에 대해 다양한 뷰를 만들고 이러한 데이터를 양식의 컨트롤에 바인딩해야 할 때 DataView를 사용하여 이를 완료해야 한다는 것입니다.
DataView는 동적 데이터 뷰를 제공합니다. 즉, 해당 콘텐츠, 정렬 순서 및 멤버는 소스 DataTable의 모든 변경 사항을 반영합니다. 확실히 DataView는 DataTable.Select 메서드와 매우 다릅니다. Select 메서드는 특정 필터 식이나 정렬 순서를 기반으로 데이터 테이블에서 DataRow 개체의 배열을 반환하며 해당 멤버와 정렬 순서는 정적입니다. DataView는 동적 반응 특성으로 인해 데이터 바인딩 애플리케이션에 사용하기에 매우 적합합니다.
DataView는 단일 데이터 컬렉션에 대한 동적 보기를 제공하며 데이터 컬렉션에 다양한 정렬 순서와 필터 조건을 적용할 수 있습니다. 이는 SQL Server 데이터베이스에서 제공하는 보기와 다소 유사합니다. 그러나 DataView는 데이터 테이블로 사용할 수 없고, 데이터 테이블을 연결하는 뷰를 제공할 수 없기 때문에 여전히 DataView와 데이터베이스 뷰에는 큰 차이가 있습니다. 또한 소스 데이터 테이블의 필드를 제외할 수 없을 뿐만 아니라 소스 데이터 테이블에 존재하지 않는 필드(예: 표현식 필드)를 추가할 수도 없습니다.
두 가지 방법으로 DataView를 만들 수 있습니다. 첫 번째 방법은 DataView 생성자를 사용하는 것이고, 두 번째 방법은 DataTable의 DefaultView 속성에 대한 참조를 만드는 것입니다. 이 문서에서는 이 두 가지 방법을 사용하여 DataView를 만드는 방법을 자세히 살펴보겠습니다.
DataView 생성자 사용
DataView 생성자는 아래 표에 표시된 것처럼 세 가지 멀티로드 버전을 제공합니다.
DataView 생성자의 멀티로드 버전
데이터뷰()
DataView(ByVal 테이블을 DataTable로)
DataView(ByVal 테이블을 DataTable로, _
ByVal RowFilter를 문자열로, _
ByVal 정렬 형식 문자열, _
ByVal RowState를 DataViewRowState로)
DataView 생성자의 첫 번째 버전은 매개 변수 없이 DataView 클래스의 새 인스턴스를 초기화합니다. 이 버전을 사용하여 DataView를 만드는 경우 DataView 개체를 만든 후 먼저 Table 속성을 설정하여 소스 DataTable을 결정해야 하며 그런 다음 계속해서 다른 속성(RowFilter, Sort...등)을 설정할 수 있습니다. .
다음 프로그램 코드는 데이터 집합에 있는 "Zhang Limin Studio" 데이터 테이블의 데이터 열을 필터링 및 정렬하기 위해 DataView 생성자의 첫 번째 버전을 사용하여 DataView 개체를 만들고 DataGridView 컨트롤을 이 개체에 바인딩하는 방법을 보여줍니다. 데이터뷰. DataGrid 컨트롤에는 여성만 표시되며 데이터는 이름의 획 순서대로 정렬됩니다. 다음은 이 예제의 프로그램 코드입니다.
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "장리민 스튜디오")
'DataView 객체 생성
Dim dv As DataView = New DataView
' 매개변수가 없는 DataView 생성자를 사용하여 DataView 객체를 생성하므로,
' 따라서 소스 DataTable을 결정하려면 Table 속성을 먼저 설정해야 합니다.
dv.Table = Ds Zhang Limin Studio. Zhang Limin Studio
' 이름의 획이 많은 것부터 적도록 정렬 순서를 설정합니다.
dv.Sort = "NameDESC"
' 여성만 표시하도록 필터 조건을 설정합니다.
dv.RowFilter = "Gender = '여성'"
' DataGridView 컨트롤을 DataView에 바인딩
DataGridView1.DataSource = dv
DataView 생성자의 두 번째 버전은 지정된 DataTable을 사용하여 DataView 클래스의 새 인스턴스를 초기화하는 것을 나타냅니다.
다음 프로그램 코드는 데이터 세트에 있는 "Zhang Limin Studio" 데이터 테이블의 데이터 열을 필터링 및 정렬하기 위해 DataView 생성자의 두 번째 버전을 사용하여 DataView 개체를 만들고 DataGridView 컨트롤을 이 개체에 바인딩하는 방법을 보여줍니다. 데이터뷰 . DataGridView 컨트롤은 "정보 부서"의 직원 데이터만 표시하며 데이터는 현재 급여에 따라 높은 것부터 낮은 것 순으로 정렬된다는 것을 발견했습니다.
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' DataView 개체 만들기
Dim dv As DataView = New DataView(Ds Zhang Limin Studio. Zhang Limin Studio)
'현재 급여를 기준으로 높은 것부터 낮은 것으로 정렬하도록 정렬 순서를 설정합니다.
dv.Sort = "Current Salary DESC"
'정보부 직원 데이터만 표시하도록 필터 조건 설정
dv.RowFilter = "Department = 'Information Department'"
' DataGridView 컨트롤을 DataView에 바인딩
Me.DataGridView1.DataSource = dv
DataView 생성자의 세 번째 버전은 지정된 DataTable, RowFilter, Sort 및 DataViewRowState를 사용하여 DataView 클래스의 새 인스턴스를 초기화하는 것을 나타냅니다.
다음 프로그램 코드는 데이터 세트에 있는 "Zhang Limin Studio" 데이터 테이블의 데이터 열을 필터링 및 정렬하기 위해 DataView 생성자의 세 번째 버전을 사용하여 DataView 개체를 만들고 DataGridView 컨트롤을 이 개체에 바인딩하는 방법을 보여줍니다. 데이터뷰 . 우리는 DataGridView 컨트롤이 현재 급여가 49,000위안보다 큰 직원 데이터만 표시하고 데이터는 현재 급여에 따라 높은 것에서 낮은 것으로 정렬된다는 것을 발견했습니다.
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' DataView 개체 만들기
Dim dv As DataView = 새 DataView( _
Ds 장리민 스튜디오, _
"현재 연봉 > 49000", _
"현재 급여 DESC", _
DataViewRowState.CurrentRows)
' DataGridView 컨트롤을 DataView에 바인딩합니다.
Me.DataGridView1.DataSource = dv
DataView가 생성되고 Sort, RowFilter 또는 RowStateFilter 속성이 수정되면 DataView의 인덱스가 다시 설정된다는 점을 모든 사람에게 상기시키고 싶습니다. 즉, 최상의 성능을 누리려면 DataView를 생성할 때 생성자에서 직접 정렬 순서나 필터 기준을 지정해야 합니다. DataView를 생성할 때 생성자에서 정렬 순서나 필터 조건을 직접 지정하지 않고 대신 DataView 개체를 생성한 후 해당 개체의 Sort, RowFilter 또는 RowStateFilter 속성을 설정하면 DataView의 인덱스가 다시 설정됩니다. 인덱스는 적어도 두 번 생성됩니다.
DataTable의 DefaultView 속성 사용
DataTable의 DefaultView 속성은 DataTable을 원본 데이터 테이블로 사용하는 DataView 개체를 반환하므로 DataTable의 데이터 열을 정렬, 필터링 및 검색할 수 있습니다. 생성한 DataView가 DataTable의 모든 데이터 열을 표시하고 이를 자연스러운 순서로 정렬하려는 경우 DataTable의 DefaultView 속성을 사용하는 것이 DataView를 생성하는 매우 직접적이고 편리한 방법이 될 것입니다.
그림 1과 같은 실행 화면의 프로그램에서는 DataTable의 DefaultView 속성을 이용하여 DataView를 생성하여 처음에는 원본 데이터 테이블의 모든 데이터 열을 DataGrid 컨트롤에 표시할 수 있도록 하고 사용자가 실행 단계에서 DataView를 전달하여 데이터를 동적으로 필터링합니다. 프로그램 코드는 다음과 같습니다.
' DataView 개체의 범주 수준 선언
DataView로 개인 dv
개인 하위 DemoForm5_Load(System.Object로 ByVal 발신자, _
ByVal e As System.EventArgs)는 MyBase.Load를 처리합니다.
FillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' DataView 생성
dv = Ds Zhang Limin Studio.Zhang Limin Studio.DefaultView
' DataView에 데이터 열 수를 표시합니다.
txtRowCount.Text = dv.Count.ToString
' DataGridView 컨트롤을 DataView에 바인딩합니다.
Me.DataGridView1.DataSource = dv
End Sub
Private Sub FillComboBoxDepartment()
'데이터 명령 개체 만들기(예: SqlCommand 개체)
새로운 SqlCommand로 Dim foxCMD
foxCMD.Connection = SqlConnection1
foxCMD.CommandText = "dbo.Zhang Limin Studio에서 DISTINCT 부서 선택"
'연결 열기
SqlConnection1.Open()
myReader를 SqlDataReader로 사용 = foxCMD.ExecuteReader()
myReader.HasRows가 다음인 경우
myReader.Read() 동안
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
종료하는 동안
종료 조건
사용 종료
ComboBoxDepartment.SelectedIndex = 0
End Sub
Private Sub btnFilter_Click(ByVal 발신자 As System.Object, _
ByVal e As System.EventArgs)는 btnFilter.Click을 처리합니다.
dv.RowFilter = "부서= '" & _
ComboBoxDepartment.SelectedItem.ToString() & "'"
'DataView의 데이터 열 수를 표시합니다.
txtRowCount.Text = dv.Count.ToString
끝 서브
http://www.cnblogs.com/liminzhang/archive/2006/10/23/537518.html