Spread for .NET
필터한 컬럼의 값을 가져오기
하_늘_바_람
2022. 5. 30. 18:12
AutoFilterColumn 이벤트에서 컬럼에서 어떤 값으로 필터를 했는지 알고 싶을 때
아래의 형태로 추출한다.
전체 이벤트 코드
private void sprPurchaseDetail_AutoFilteredColumn(object sender, AutoFilteredColumnEventArgs e) {
// 합계 값 재계산
// 최종 필터 값
string lastFilterString = string.Empty;
// 내부 필터 값
string innerFilterString = string.Empty;
// 필터를 설정한 컬럼 가져오기
foreach (FilterColumnDefinition columnDef in e.Sheet.RowFilter.ColumnDefinitions) {
// 컬럼명
string columnName = dtPurchaseDetail.Columns[columnDef.ColumnIndex].ColumnName;
// 필터를 설정한 컬럼에서 필터 정보 추출하기
foreach (var item in columnDef.Filters) {
// 기본(다중 필터가 아닌)인 경우는 다음으로 넘어가기
if (item is null || item is FarPoint.Win.Spread.DefaultFilterItem)
continue;
// 필터 해제를 할 때 해당 열의 인덱스와 All이라는 문자열을 반환한다.
// 이 경우 기존의 필터에 설정된 값을 삭제 처리 함.
// 왜 자동으로 삭제가 안되는지를 모르겠음.
if (columnDef.ColumnIndex == e.Column && e.FilterString.Contains("All")) {
(item as MultiValuesFilterItem).FilterItems.Clear();
continue;
}
// 필터용 문자열 만들기
// 내부 필터는 OR로 연결
foreach (FilterItemValue itemValue in (item as MultiValuesFilterItem).FilterItems) {
innerFilterString += $" OR {columnName} = '{itemValue.Value}'";
}
}
// 최종 필너는 OR로 연결된 내부 필터를 AND로 연결함.
if (innerFilterString.Length > 0) {
lastFilterString += " AND (" + innerFilterString.Substring(4) + ")";
innerFilterString = string.Empty;
}
}
// 계산 로직을 실행하는 부분
CalcSpreadTotalSum(lastFilterString.Length >= 5 ? lastFilterString.Substring(5) : "");
}