트레이닝 센터

폼 설정

Spread for Winforms 표 컨트롤: 교차표 보고서 구현하기

Spread 표 컨트롤은 업계에서 Excel과의 높은 호환성으로 유명하며 보고서 작성에 널리 쓰이고 있습니다. 일상 업무에서 excel로 교차표 보고서를 작성할 일이 많습니다. Excel 교차표 보고서의 좌측 상단 셀의 사선은 Excel 셀 사선 테두리로 작성합니다. 그럼 Spread에서도 이런 효과를 구현할 수 있을까요? 본문에서는 Spread에서 사선을 추가해 교차표 보고서의 머리글 효과를 구현하는 법을 설명하겠습니다.

Spread 테두리에는 사선 테두리가 없지만 다양한 도형 기능은 UI 배치는 물론, 인쇄, Excel 내보내기도 지원합니다. 본문에서는 LineShape를 사용해 비슷한 효과를 내보겠습니다.


  1. Spread에 LineShape를 추가하는 방법은 아래와 같습니다.
    1: FarPoint.Win.Spread.DrawingSpace.LineShape lShape =
     new FarPoint.Win.Spread.DrawingSpace.LineShape();
      2: lShape.Name = "line";
      3: lShape.Top = 0;
      4: lShape.Left = 0;
      5: lShape.Thickness = 5;
      6: lShape.ShapeOutlineColor = Color.Red;
      7: this.fpSpread1.Sheets[0].AddShape(lShape);
    )

    결과 :

  2. 셀의 길이와 너비를 계산해 LineShape의 시작 위치와 각도를 계산합니다.
    1: private Rectangle CaculateRectangle(int startRowIndex, int startColIndex
    , int endRowIndex, int endColIndex)
      2: {
      3:     float height = 0;
      4:     float width = 0;
      5:     for (int i = startRowIndex; i <= endRowIndex; i++)
      6:     {
      7:         height += this.fpSpread1.Sheets[0].Rows[i].Height;
      8:     }
      9: 
     10:     for (int i = startColIndex; i <= endColIndex; i++)
     11:     {
     12:         width += this.fpSpread1.Sheets[0].Columns[i].Width;
     13:     }
     14:     Rectangle cellRec = this.fpSpread1.GetCellRectangle(0, 0, startRowIndex, startColIndex);
     15:     Point startPositoin = new Point(cellRec.Left - (int)this.fpSpread1.Sheets[0].SheetCorner
    .Columns[0].Width, cellRec.Top - (int)this.fpSpread1.Sheets[0].SheetCorner.Rows[0].Height);
     16: 
     17:     Rectangle rec = new Rectangle(startPositoin, new Size((int)width, (int)height));
     18: 
     19:     return rec;
     20: }
  3. SetBounds 설정 방법으로 LineShpae 위치 정보를 설정합니다.
    1: FarPoint.Win.Spread.DrawingSpace.LineShape line = 
    new FarPoint.Win.Spread.DrawingSpace.LineShape();
      2: line.Name = "mark";
      3: line.ShapeOutlineColor = Color.Gray;
      4: line.Width = 2;
      5: line.Location = new Point(0, 0);
      6: 
      7: Rectangle rec = CaculateRectangle(0, 0, 2, 1);
      8: line.SetBounds(rec);

    이상이 설정의 핵심 코드입니다. 위 방법을 사용하면 다음과 같은 결과를 얻을 수 있습니다.


    머리글 숨기기 및 테두리 설정 후 아래와 같은 결과를 얻을 수 있습니다.


    간단한 샘플을 참고해 주시기 바랍니다.

샘플 다운로드



한국 그레이프시티 공식카페에서 기술지원을 받으실 수 있습니다.
이메일을 통해서도 기술지원을 받으실 수 있습니다.