반응형

Grid에서 특정 row를 선택하여 해당 row와 관련된 modeless 창을 띄우고 작업을 하는 도중,
원래 Form에서 Grid가 정렬되어 기존 row의 handle이 변경되었을 경우 단순히 FocusedRowHandle을 보관 했다가
찾아가는 방식은 사용할 수 없다(그리드 내에서 위치가 변경 되었으므로).
이때는 다음과 같이 DataSourceRowIndex를 보관 했다가, 해당 값으로 현재의 FocusedRowHandle 값을 찾아가야 한다.
DataSourceRowIndex는 DataSource내의 고유한 index이기 때문에 GridView에서 보여지는 형태와 관계없이 일정하게 유지 되므로 이 값을 가진 RowHandle을 찾아내는 방식이다.

// modeless 창을 띄우기 전에 현재 선택된 row의 DataSourceRowIndex를 보관
var rowIndex = gView1.GetFocusedDataSourceRowIndex(); 
.....
/*
  modeless 창을 띄우고 작업하는 도중, Grid가 정렬 되었다고 가정
*/
....
// modeless 창이 닫히고, 다시 원래의 FocusedRowHandle를 찾아가게 한다.
var rowHandle = GetRowHandleFromRowIndex(gView1, rowIndex);
gView1.FocusedRowHandle = rowHandle;
 
// DataSourceRowIndex를 가진 행을 찾아서 RowHandle 값으로 되돌린다.
private int GetRowHandleFromRowIndex(GridView gridView, int rowIndex) {
  int result = -1;
 
  for (int i = 0; i < gridView.DataRowCount; i++) {
    if (gridView.GetDataSourceRowIndex(i) == rowIndex) {
      result = i;
      break;
    }
  }
 
  return result;
}
반응형

+ Recent posts