퇴근5분전

2019/01/03 +1

 

 음... 오늘 플젝하면서 그리드 Summary 구현하다가 하도 지저분해져서 좀 쉽게 안되나 하고

 

고민 고민 하다가 좋은걸 만들어냈다.

 

아래는 샘플로 구현했던 코드이다.

 

요새 상용 그리드는 밴드까지 있어서 컬럼 하나 찾아 설정하려면 코드가 많이 길어진다.

 

그래서 탄생한 로직이 아래처럼 만든 소스이다.

 

원래 하려던 소스는

    SettingColumns( 그리드, 밴드, ("컬럼키", ( col )=>{ 

           컬럼 설정....

    }),  

    ("컬럼키2", ( col )=>{ 

           컬럼2 설정....

    }));

 

이런식으로... 처리할수 없을까 였는데...

 

쉽게 될것 같은게 한시간은 머리빠개지게 고민하고 코딩하고 했던것 같다.

 

Action이나 Func 대리자를 이용하여 처리하면 될 것 같았는데... 직접은 안되고.

Tuple<string, Action<Column>> 으로 여러개 하려니 직접 생성도 해야되고... 번거롭더라

 

그래서...  두 메서드를 연결하는 메서드 형태를 고안해냈다.

 

 

위에 소스의 흐름은 간략하게 설명하면 다음과 같다.      

    1. GetCol 을 호출하면서 컬럼키를 넘겨주고

    2. GetCol에서 반환된 Action<DataGridView>의 대리자가 SettingsColumns에 setTransfers에 쌓인다. 

    3. 다음 SettingsColumns에서 foreach하면서 쌓인 대리자를 하나씩 호출하면서 그리드를 넘겨주면서 호출을 한다.

    4. 그러면 Action<DataGridView> 대리자 안에 구현된 setColumn의 대리자를 호출하면서 그리드에서 컬럼을 꺼내 외부로 전달하게 된다.

    5. 전달받은 column 객체는 GetCol( "AAA", Col =>   이부분으로 Col 객체로 넘어오게 된다.

   이렇게 순차적으로 넘어오면 컬럼을 각각 입맛에 맞춰 수정해주면 된다.

 

그래서 이걸 이대로 쓰나?? 아니다. 좀더 줄여본다.

 

 

동일한 동작을 하도록 대리자를 만들었다.

 

이렇게 하면 좋은점이라고 생각되는 것은 그리드의 컬럼을 설정할때 위와 같이 하면

 

컬럼1 설정...

 

컬럼2 설정...

 

컬럼3 설정...

...

 

이런식으로 세로로 쭉!! 나열했을때

컬럼에 다른 옵션등을 주면 소스가 중간이 두꺼워지고 빈줄로 구분하거나 region으로 구역을 나누게 되는데

 

위처럼 하면

그리드.SetColumns(

GetCol("컬럼키", col =>{

        // 설정

}),

GetCol("컬럼키2", col => {

        // 설정

}),

...

);

 

이런식으로 함수차제로 쪼갤 수 있다.

물론 다른 형태로 조각 조각 내서 관리할수 도 있다.

그래도 그리드설정시 기본 컬럼도 같이 한셋으로 묶는게 가능해졌다.

 

 요새 상용그리드 같은 경우 band개념이 있어서 소스가 지저분해져서... 어떻게하면 구역을 쪼개서 묶을수 있나... 라고 고민했는데...

여기에 딱이네.