! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

C1TrueDBGrid 행 번호 추가하는 방법 > 온라인 스터디

본문 바로가기

ComponentOne

온라인 스터디

Winforms원폼 C1TrueDBGrid 행 번호 추가하는 방법

페이지 정보

작성자 GrapeCity 작성일 2021-05-12 10:20 조회 948회 댓글 0건

본문

첨부파일

종종 그리드(Grid)를 사용하다 보면, 사용자의 데이터 가독성을 위하며, Excel과 같은 형태의 행 숫자 형식의 인덱싱이 필요할 경우가 있습니다.


그러나 현재 아쉽게도 C1TrueDBGrid는 컨트롤의 특성 상 행 번호를 표시하는 기능이 따로 내장되어 있지 않습니다. 하지만, 그렇다고 해서 완전히 해당 기능을 구현하지 못하는 것을 아닙니다. 약간의 코드로 원하시는 그리드 구성을 통해 최종 사용자에게 좀 더 보기 좋은 그리드를 보여줄 수 있습니다.

(*행/열의 헤더를 다양한 방법을 사용자 정의하고자 하시는 경우에는 FlexGrid 사용을 추천드립니다.)


이에 이번 포스팅에서는 ComponentOne(컴포넌트원) Winforms(윈폼)의 True DB Grid 에서 아래와 같이 행 번호를 표시하는 방법에 대해서 알아보고자 합니다.




C1TrueDBGrid의 기본적인 레코드 선택기(Record Selector) 열 또는 행 헤더는 변경이 불가능하기 때문에 원래의 헤더를 대체할 별도의 헤더를 정의해야 합니다.


이 헤더는 우선 바인딩되지 않은 상태로 추가 됩니다. 그 이후 아래와 같이 UnboundColumnFetch 이벤트를 사용하여 행 번호를 채워 넣습니다

private void c1TrueDBGrid1_UnboundColumnFetch(object sender, C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs e)
{
  if (e.Row == row)
  {
      e.Value = "";
  }
  else
  {
      if (!filter)
      {
          e.Value = (e.Row + 1).ToString();
      }
      else
      {
          if (!filterdone)
          {
              counter++;
              for (int i = filindex; i < filtercol.Length; i++)
              {
​
                  if (filtercol[i] == c1TrueDBGrid1.Columns[c1TrueDBGrid1.Col].FilterText || filtercol[i].StartsWith(c1TrueDBGrid1.Columns[c1TrueDBGrid1.Col].FilterText))
                  {
                      e.Value = rowindex[i];
                      filindex = i + 1;
                      filteredindexes[counter - 1] = rowindex[i];
                      break;
                  }
              }
              if (counter == c1TrueDBGrid1.RowCount)
              {
                  counter = 0;
                  filterdone = true;
              }
          }
          else
          {
              e.Value = filteredindexes[e.Row];
          }
      }
  }
}


다음 단계는 OwnerDrawCell 이벤트를 사용하는 것입니다. 이 이벤트는 사용자가 특정 행을 선택 했을 때, 활성 행인지 여부에 따라 행 선택기(화살표) 또는 행 번호를 표시하는 데 사용됩니다.

this.c1TrueDBGrid1.OwnerDrawCell += (ss, ee) =>
{
  if (ee.Row == row)
      ee.Style.BackgroundImage = Image.FromFile(@"..\..\Images\Rec_Sel.png");
};


이제 행 추가, 삭제, 정렬 시에 올바르게 인덱싱이 될 수 있게 처리하는 과정이 남았습니다.

이를 위해, BeforeColEdit 및 AfterFilter 이벤트에 index 값을 올바르게 설정해주는 코드를 아래와 같이 추가하시면 됩니다.

private void c1TrueDBGrid1_AfterFilter(object sender, C1.Win.C1TrueDBGrid.FilterEventArgs e)  
{  
if (e.Condition != "")  
{  
  filter = true;  
  filindex = 0;  
  filterdone = false;  
  filteredindexes = new string[c1TrueDBGrid1.RowCount];  
}  
else  
{  
  filter = false;  
}  
}  
​
private void c1TrueDBGrid1_BeforeColEdit(object sender, C1.Win.C1TrueDBGrid.BeforeColEditEventArgs e)  
{  
if (c1TrueDBGrid1.FilterActive && c1TrueDBGrid1.Columns[e.ColIndex].FilterText == "")  
{  
  filtercol = new string[c1TrueDBGrid1.RowCount];  
  rowindex = new string[c1TrueDBGrid1.RowCount];  
  for (int r = 0; r < c1TrueDBGrid1.RowCount; r++)  
  {  
    rowindex[r] = c1TrueDBGrid1[r, 0].ToString();  
    filtercol[r] = c1TrueDBGrid1[r,e.ColIndex].ToString();  
  }  
}  
}  


이렇게 하고 나면 마지막에 UnboundColumnFetch 이벤트가 다시 한 번 바인딩 해제 된 전체 열의 행 번호를 각각 채워 넣게 됩니다.

실제 동작하는 코드는 첨부된 샘플 프로젝트를 참고해 주시기 바랍니다.


참고

True DBGrid for WinForms는 데이터 바인딩에 적합하며, 분할 보기 및 기본 제공 계층적 바인딩 및 그룹화 등 데이터 바인딩 영역에서 강력한 기능을 제공합니다. 주로 바운드(Bound) 모드에서 그리드를 사용하고 분할 및 계층적 뷰와 같은 고급 기능이 필요한 경우 True DBGrid for WinForms가 올바른 선택입니다.

그러나 주로 바인딩 되지 않은 모드에서 그리드로 작업할 계획이거나 객체 모델이 제공하는 것 이상으로 더욱 유연하고 다양한 기능을 제공하며 고성능의 그리드를 사용자 정의해야하는 경우 C1FlexGrid가 더 나은 선택입니다.

즉 쉽게 예기하면, 데이터베이스에 있는 테이블 모습의 데이터를 그대로 불러와 데이터의 변경을 바로 반영하는 경우에는 True DB Grid를 사용하시기를 권장드리며, 데이터를 바인딩 하여, 셀 병합, 데이터 양식 변경, 사용자 정의 행/열 및 셀 서식 등 유연한 데이터 관리 및 시각화를 하고자 하는 경우에는 FlexGrid 사용하시는 것을 추천 드립니다.


ComponentOne 알아보기

ComponentOne Enterprise는 기업용 응용 프로그램 제작의 생산성 향상에 중점을 둔 .NET 종합 UI 컨트롤 패키지입니다. 그리드, 차트, 리포트, 입력 폼, 스케줄러, 캘린더, 리본 등 400개 이상의 컨트롤을 포함하고 있으며 다양한 유형의 플랫폼을 지원하고 있습니다.

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.