728x90

처음에 접했을때.. 도대체가 기본키 컬럼명이 무엇이고 어떻게 찾아야하는건지 한참 해맸다.

사용하기전에 먼저 DataTable 를 구성한후 DataTable 에 기본키 컬럼을 지정해야한다.

 

//DataTable 정의

DataTable dt = new DataTable();

dt.Columns.Add("A");

dt.Columns.Add("B");

dt.Columns.Add("C");

dt.Columns.Add("D");

dt.Columns.Add("A");

 

//기본키 컬럼 정의

DataColumn[] dtkey = new DataColumn[1];
dtkey[0] = _dt.Columns["A"];
dt.PrimaryKey = dtkey;

 

이렇게 하면 A라는 컬럼은 기본키 컬럼이 되어 고유한 값만을 가지게 된다.

그러므로 이 DataTable의 A컬럼 에는 고유한 값만이 들어가도록 해야한다.

(고유한 값으로는 저장시 시간을 넣는 방법 

  sequence를 생성해 넣는 방법

  DataTable 에서 제공하는 컬럼 인덱스를 자동으로 부여하는 방법 <- 마지막에 설명 있음

  이 있다.)

 

예를 들어 A 컬럼의 2009가 들어 있는 row를 가져 오고 싶다면 아래와 같이 코딩하면 된다.

DataRow dr = dt.Rows.Find("2009");

그리고 만약 이 row의 DataTable 내에서의 인덱스를 알고 싶다면 아래와 같이 코딩하면 된다.

int selRow = _dtList.Rows.IndexOf(Dr);

 

 

 

1. DataRowCollection의 Find 메서드를 사용한 필터링
  - DataRowCollection 클래스의 Find메서드는 DataTable 에 있는 행의 기본키 값을 기반으로 DataRow를 찾을 수 있게 한다
  - 기본키를 대상으로 검색을 하므로 반환되는 DataRow는 오직 하나의 행이다
 예제>>
 임의의 DataTable 의 객체명이 dt라 가정한다
 dt.PrimaryKey = new DataColumn[] {dt.Columns["기본키컬럼명"]};
 DataRow row = dt.Rows.Find("찾을값"); //대상 컬럼은 기본키 컬럼이다
 if(row != null)
  Console.WriteLine("행이 있습니다");

 

2. Select 메서드 사용한 필터링
- DataTable의 Select메서드는 특정 컬럼들의 검색과 정렬을 가능하게 한다
- 하나이상의 컬럼을 비교 또는 정렬이 가능하다
 예제>>
 임의의 DataTable 의 객체명이 dt라 가정한다
 DataRow[] rows = dt.Select("컬럼1=값1 or 컬럼2=값2","컬럼 desc");

 

3. DataView의 Find 메서드를 사용한 필터링
 - DataView 객체의 Find메서드는 DataView 객체의 Sort 속성에 지정한 열을 기반으로 검색 한다
 예제>>
 임의의 DataTable 의 객체명이 dt라 가정한다
 DatView dv = dt.DefaultView;
 dv.Sort = "컬럼명"; //정렬을 할 컬럼 지정
 DataRowView[] rows = dv.FindRows("찾을값"); //Sort속성에서 지정한 컬럼을 대상으로 검색
 if(rows.Length > 0)
  Console.WriteLine("행이 있습니다")
 
 DataRowCollection의 Find메서드와는 달리 다수의 행이 반환될수 있다

 

728x90
Posted by kjun.kr
,