Spread for .NET

스프레드 내용에서 문자 검색

하_늘_바_람 2022. 7. 25. 15:11

// 현재 검색에서 행 위치 지정하기
// 범위 검색이기 때문에 범위 검색의 시작 위치를 지정하기 위해서 사용한다.
private int SearchedRowIndex = 0

private void txtSearchSkuFullNM_KeyDown(object sender, KeyEventArgs e) {
    if (e.KeyCode == Keys.Enter) {
    	// 초기화
        int refRowIndex = -1, refColumnIndex = -1;
        SearchFoundFlags result;

		// 순환 검색을 위해서 반복문 사용함.
        while (true) {
        	// 반드시 범위검색 조건을 true로 해야만 해당 컬럼에서만 검색을 처리한다.
            result = sprFSOR02.Search(0, txtSearchSkuFullNM.Text, false, false, false, false, true, false, false, 
                        true, SearchedRowIndex,	// 범위검색(searchAsBlockRange), 범위검색에서 행의 시작 위치 설정
                        IDX_H_SKUFULLNM, shtFSOR02.RowCount - 1, IDX_H_SKUFULLNM, 
                        ref refRowIndex, ref refColumnIndex);

            if (result == SearchFoundFlags.Error) {
            	// 행의 시작 위치에서 찾기를 했을 때 값이 없으면 반복문 탈출
                if (SearchedRowIndex == 0) {
                    MessageBox.Show("찾고자 하는 상품이 없습니다.", "알림", 
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtSearchSkuFullNM.SelectAll();
                    break;
                }
                else {
                	// 행의 시작위치로 이동하기
                    SearchedRowIndex = 0;
                }
            }

            if (result != SearchFoundFlags.Error && refRowIndex >= 0 && refColumnIndex >= 0) {
            	// 찾기는 성공했으나 혹시 필터로 인해 숨겨진 곳이라면 다음 찾기로 이동처리
                var filteredRowIndexes = shtFSOR02.RowFilter.GetIntersectedFilteredInRows();

                if (filteredRowIndexes != null && !filteredRowIndexes.Contains(refRowIndex)) {
                    SearchedRowIndex = refRowIndex + 1;
                    continue;
                }

				// 해당 셀로 이동
                shtFSOR02.SetActiveCell(refRowIndex, refColumnIndex);
                sprFSOR02.ShowActiveCell(VerticalPosition.Nearest, HorizontalPosition.Nearest);
                
                // 다음 행부터 검색
                SearchedRowIndex = refRowIndex + 1;
                txtSearchSkuFullNM.SelectAll();
                break;
            }
        }
    }
    else if (e.KeyCode == Keys.Escape) {
        txtSearchSkuFullNM.Text = "";
        SearchedRowIndex = 0;
    }
}