2013-07-19 3 views
1

기본 키를 사용하여 DataView에서 DataViewRow의 인덱스를 찾는 방법
현재 정렬 순서를 방해하지 않고 (기본 키가 아닌) DataViewRow의 인덱스를 찾는 방법?기본 키를 사용하여 DataView에서 행 찾기

DataView의 내용을 표시하는 표 컨트롤이 있습니다. 이
격자의 한 행이 선택됩니다. 정렬을 변경해야 할 때 새로운 정렬 순서로 선택된
행을 유지하고 싶습니다. 그래서 새로운 정렬 순서가 설정되기 전에 선택된
DataViewRow의 기본 키를 가져 와서 새 기본 정렬 순서로 동일한 기본 키
을 찾습니다.

현재 특정 기본 키에 대해 DataView를 수동으로 검색해야합니다.
더 좋은 방법이 있나요?

기본 키 대신 인덱스 위치가있는 솔루션도 마찬가지입니다.

답변

0

은 내가이 문제를 해결하는 가장 적절한 방법을 찾은 것 같아요, 그래서 사람이 여기에 관심이 경우는 다음과 같습니다

DataView를의 찾기 방법은 빠른 현재 정렬 순서를 사용하여 행을 찾습니다. 그 문제는 정렬 키가 일반적으로 고유 한 정렬 키가있는 모든 행 을 식별하지 않는다는 것입니다. 그래서 이것이 작동하려면 정렬 키를 모든 행마다 고유하게 적용해야합니다. 정렬 표현식의 끝 부분에 기본 키를 추가하여 간단하게 을 수행 할 수 있습니다. 그런 식으로 고유하지 않은 모든 정렬 키는 추가적으로 이 기본 키로 정렬되고 정렬 키는 고유로 이되며 정렬 순서가 동시에 유지됩니다. 다음 예는 다음과 같습니다

이의 우리가 DataTable을로드 한 가정 해 봅시다 :

id last_name first_name date_of_birth 
---------------------------------------- 
11 Rogers  Samuel  1968-08-17 
12 Smith  John  1952-12-25 
13 Johnson Bob   1981-03-29 
14 Smith  John  1977-02-08 
15 Adams  David  1971-09-15 
---------------------------------------- 

// set primary key for DataTable 

table.PrimaryKey = new DataColumn[] { table.Columns[ "id" ] }; 

// create first sorting order by last and first name 
// but make sort unique by adding primary key at end 

DataView view1 = new DataView(table); 
view1.Sort = "last_name, first_name, id"; 

// create second sorting order by date of birth and again 
// make sort unique by adding primary key at end 

DataView view2 = new DataView(table); 
view2.Sort = "date_of_birth, id"; 

// get DataRow of DataTable with primary key 14 

DataRow row = table.Rows.Find(14); 

// using data from DataRow find matching sort key 

// be aware that Find method of DataView could return -1 
// if DataView has filter set that hides row you search 

int index_in_view1 = view1.Find(new Object[] { row[ "last_name" ], 
               row[ "first_name" ], 
               row[ "id" ] }); 

int index_in_view2 = view2.Find(new Object[] { row[ "date_of_birth" ], 
               row[ "id" ] }); 

사람이 정말 듣고 관심 것이 솔루션에 이의가있는 경우.

관련 문제