|
확인란 |
|
문서번호 |
2014–DV-001 |
보존기간 |
1년 |
보고일자 |
2014.4.10(목) |
작성자 |
오 지 환 |
Data View
2014년 4월
Sunmoon Bit 27st |오지환
목차
1. DataView란
2. DataView의 구성도
3. DataView 생성
4. DataView클래스의 속성과 메서드
5. 간단한 실습
5.1 AllowNew, AllowDelete, AllowEdit
5.2 Find, FindRows
5.3 FowFilter, Sort
표 목차
[표 1] DataView클래스의 public한 속성
[표 2] DataView클래스의 protected한 속성
[표 3] DataView클래스의 public한 메서드
[표 4] DataView클래스의 protected한 메서드
[표 5] DataView클래스의 DataViewRowState속성
그림 목차
[그림 1] DataView클래스의 구성도
[그림 2] 테이블 생성
[그림 3] AllowNew, AllowDelete, AllowEdit 속성
[그림 4] Find 메서드
[그림 5] FindRows 메서드
[그림 6] RowFilter속성
[그림 7] Sort속성
1. DataView란?
- DataView클래스는 정렬이나 원하는 행만 선택해서 보여줄 수 있다.
- 필터링 처리, 검색, 편집 및 탐색 기능을 제공하기 위해 데이터 바인딩을 할 수 있는 DataTable의 사용자 지정 뷰를 나타낸다.
- 테이블에 저장된 데이터를 기초로 생성할 수 있는 하나의 뷰를 논리적으로 구현한 것이라 할 수 있다.
- DataView에서는 원본 DataTable이 변경되어 발생할 때 변경 사항을 데이터의 내용, 순서 및 정렬 순서에 대해 테이블의 DataRow배열을 반환한다.
2. DataView클래스의 구성도
System.Object System.ComponentModel.MarchalByValueComponent System.Data.DataView
[그림 1]
3. DataView의 생성
- 인자가 없는 기본 생성자로 생성
Public DataView();
- 생성자에 DataTable만 인자로 넣어서 생성
Public DataView(DataTable table);
- 원하는 필터링 조건을 추가해서 생성
Public DataView(DataTable table, string row_filter
, string sort, DataViewRowState state);
4. DataView의 속성과 메서드
- DataView클래스의 public한 속성
이름 |
설명 |
AllowDelete |
삭제가 허용되는지 여부를 나타내는 값을 설정하거나 가져온다. |
AllowEdit |
편집이 허용되는지 여부를 나타내는 값을 가져오거나 설정한다. |
AllowNew |
AddNew 메서드를 이용하여 새 행을 추가할 수 있는지 여부를 나타내는 값을 가져오거나 설정한다. |
ApplyDefaultSort |
기본 정렬을 사용할 것인지를 설정한다. |
Container |
구성요소의 컨테이너를 가져온다. |
DataViewManager |
DataView와 관련된 DataViewManager를 가져오거나 설정한다. |
DesignMode |
구성요소가 현재 디자인모드 여부를 나타내는 값을 리턴한다. |
Item |
지정된 테이블에서 데이터 행을 가져온다. |
Count |
RowFilter와 RowStateFilter를 적용한 다음 DataView의 레코드 수를 가져온다. |
Sort |
DataView에 대한 정렬 열과 정렬 순서를 가져오거나 설정한다. |
RowFilter |
DataView에 표시할 행을 필터링하는 데 사용하는 식을 설정한다. |
RowStateFilter |
DataView에 사용되는 RowStateFilter를 행 상태를 가져오거나 설정한다. |
Site |
구성요소의 사이트를 가져오거나 설정한다. |
Sort |
DataTable에 대한 정렬 열과 정렬 순서를 설정 |
Table |
소스 DataTable을 설정한다. |
[표 1]
- DataView클래스의 protected한 속성
이름 |
설명 |
Events |
이벤트 핸들러의 목록을 가져온다. |
IsOpen |
현재 데이터 소스가 열려있는지를 나타낸다. |
[표 2]
- DataView클래스의 public한 메서드
이름 |
설명 |
AddNew |
새 행을 DataView에 추가한다. |
BeginInit |
폼에 사용 / 다른 구성요소에서 사용하는 DataView 초기화를 시작한다. |
CopyTo |
항목을 배열로 복사한다.(웹 폼 전용) |
Delete |
지정된 인덱스의 행을 삭제한다. |
Dispose |
리소스를 해제한다. |
EndInit |
폼에 사용 / 다른 구성요소에서 사용하는 DataView 초기화를 종료한다. |
Equals |
두 개의 Object인스턴스가 같은지 여부를 확인한다. |
Find |
지정된 정렬 키 값에 따라 DataView에서 행을 찾는다. |
FindRow |
열 값이 지정된 정렬 키 값과 일치하는 DataRowView 개체의 배열을 반환한다. |
GetEnumerator |
DataView에 대한 열거자를 가져온다. |
GetHashCode |
해시코드를 가져온다. |
GetService |
IServiceProvider의 구현자를 가져온다. |
[표 3]
- DataView클래스의 protected한 메서드
이름 |
설명 |
Close |
DataView를 닫는다. |
ColumnCollectixxonChanged |
DataColumnCollection을 성공적으로 변경 후 발생한다. |
Finallize |
GC에서 오브젝트를 회수하기 전 오브젝트가 리소스를 해제한다. |
IndexListChanges |
DataView를 성공적으로 변경 후 발생한다. |
OnListChanges |
ListChanged 이벤트를 발생시킨다. |
Open |
DataView를 연다. |
Reset |
내부 전용으로 예약된다. |
UpdateIndex |
내부 전용으로 예약된다. |
[표 4]
5. 간단한 실습
5.1 AllowNew, AllowDelete, AllowEdit
DataTable dt = new DataTable("선문비트 27기"); DataColumn dc = new DataColumn("이름, typeof(string)); dt.Columns.Add(dc); dc = new DataColumn("나이, typeof(int)); dt.Columns.Add(dc);
DataRow dr; dr = dt.NewRow(); dr["이름] = "오지환"; dr["나이"] = "25"; dt.Rows.Add(dr);
dr = dt.NewRow(); dr["이름"] = "박민호"; dr["나이"] = "12"; dt.Rows.Add(dr);
dr = dt.NewRow(); dr["이름"] = "전진영"; dr["나이"] = "49"; dt.Rows.Add(dr);
dt.AcceptChanges();
Console.WriteLine("테이블의 이름 : {0} ", dt.TableName); Console.WriteLine("\n테이블 생성-"); Console.WriteLine(" {0} {1}", dt.Columns[0].ColumnName, dt.Columns[1].ColumnName);
for (int i = 0; i < dt.Rows.Count; i++) { Console.WriteLine("{0} {1}", dt.Rows[i].ItemArray[0], dt.Rows[i].ItemArray[1]); }
[그림 2]
//**********DataView 생성*********** //--------------추가---------------- DataView dv = new DataView(dt); dv.AllowNew = true; // AllowNew=true 이어야 DataView에 새 행을 추가 dr = dt.NewRow(); dr["이름"] = "선문대"; dr["나이"] = "30"; dt.Rows.Add(dr);
Console.WriteLine("\n-AllowNew 속성 적용 후-"); DataTable dv_dt = dv.Table; Console.WriteLine(" {0} {1}", dt.Columns[0].ColumnName , dt.Columns[1].ColumnName);
for (int i = 0; i < dv_dt.Rows.Count; i++) { Console.WriteLine("{0} {1}", dv_dt.Rows[i].ItemArray[0] , dv_dt.Rows[i].ItemArray[1]); }
//---------------삭제---------------- dv.AllowDelete = true; // AllowDelete=true 이어야 삭제 가능 DataRowCollection drc = dt.Rows;
if (dv.AllowDelete) { drc[0].Delete(); } dt.AcceptChanges();
Console.WriteLine("\n-AllowDelete 속성 적용 후-"); dv_dt = dv.Table; Console.WriteLine(" {0} {1}", dt.Columns[0].ColumnName , dt.Columns[1].ColumnName);
for (int i = 0; i < dv_dt.Rows.Count; i++) { Console.WriteLine("{0} {1}", dv_dt.Rows[i].ItemArray[0] , dv_dt.Rows[i].ItemArray[1]); }
//---------------변경---------------- dv.AllowEdit = true; dv[0].BeginEdit(); dv[0]["이름"] = "백현균"; dv[0].EndEdit();
Console.WriteLine("\n-AllowEdit 속성 적용 후-"); dv_dt = dv.Table; Console.WriteLine(" {0} {1}", dt.Columns[0].ColumnName , dt.Columns[1].ColumnName);
for(int i=0;i<dv_dt.Rows.Count;i++) { Console.WriteLine("{0} {1}", dv_dt.Rows[i].ItemArray[0] , dv_dt.Rows[i].ItemArray[1]); } [그림 3]
|
5.2 Find, FindRows
// Find 메서드 DataSet ds = new DataSet(); ds.Tables.Add(dt); // DataSet
Console.WriteLine("\n-전진영 학생 찾기-\n"); dv = new DataView(ds.Tables["선문비트 27기"], "", "이름", DataViewRowState.CurrentRows); // DataSet에 있는 테이블 명, RowFilter, 컬럼 이름, 행 상태 필터
int findindex = dv.Find("전진영"); if (findindex == -1) // -1이면 검색 실패 { Console.WriteLine("검색 실패"); } else // 그 외의 값이면 검색 성공 { Console.WriteLine("검색 성공"); Console.WriteLine("이름 : " + dv[findindex]["이름"].ToString()); Console.WriteLine("나이 : " + dv[findindex]["나이"].ToString()); } [그림 4]
- DataViewRowState
[표 5]
// FindRows 메서드 dv=new DataView(ds.Tables["선문비트 27기"],"","이름, 나이", DataViewRowState.CurrentRows); // 이름과 나이에 맞는 행 검색
Console.WriteLine("\n-이름은 백현균이고 나이는 12인 행 검색-"); DataRowView[] findrows=dv.FindRows(new object[]{"백현균","12"}); // 이름은 백현균이고 나이는 12인 행 검색
if(findrows.Length==0) // Length가 0이면 검색 실패 { Console.WriteLine(" 검색 실패"); } else { Console.WriteLine(" 검색 성공"); foreach(DataRowView drv in findrows) //검색 결과를 순차적으로 출력 { Console.WriteLine("이름 : "+drv["이름"].ToString()); Console.WriteLine("나이 : "+drv["나이"].ToString()); } }
|
5.3 RowFilter, Sort 속성
// RowFilter 속성
DataSet ds = new DataSet(); ds.Tables.Add(dt);
DataView dv = new DataView(ds.Tables["선문비트 27기”]); dv.RowFilter = "나이 = 25"; // 컬럼 명에 값을 입력
Console.WriteLine("\n나이 25로 검색"); Console.WriteLine("{0}명의 검색 결과", dv.Count); // dv.count : 검색 결과 행의 개수
for (int i = 0; i < dv.Count; i++) { Console.WriteLine("이름 : {0} ", dv[i].Row["이름"]); // dv[인덱스 값].Row[컬럼명] 접근 Console.WriteLine("나이 : {0} ", dv[i].Row["나이"]); [그림 6]
// Sort 속성 DataView dv = new DataView(dt); dv.Sort = "나이 DESC"; // Sort에 컬럼과 정렬법 입력
Console.WriteLine("-나이를 내림차순 정렬-"); for (int i = 0; i < dv.Count; i++) { Console.Write("이름 : {0} ", dv[i].Row["이름"]); Console.WriteLine("나이 : {0} ", dv[i].Row["나이"]); }
Console.WriteLine("\n"); Console.WriteLine("-나이는 오름차순, 이름은 내림차순 정렬-"); dv.Sort = "나이 ASC, 이름 DESC"; for (int i = 0; i < dv.Count; i++) { Console.Write("이름 : {0} ",dv[i].Row["이름"]); Console.WriteLine("나이 : {0} ",dv[i].Row["나이"]); } [그림 7]
|