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) : "");
}
'Spread for .NET' 카테고리의 다른 글
변경된 바인딩의 필터 다시 적용하기 (0) | 2022.06.27 |
---|---|
필터된 SheetView에서 클립보드 복사하기 (0) | 2022.06.02 |
spread for.NET grouping 확장/축소 (feat. coding) (0) | 2022.05.13 |
RangeGroup 예제 (0) | 2022.05.13 |
grouping과 footer 예제 (0) | 2022.05.12 |