트레이닝 센터

셀 유형

대각선 그리기 DiagonalCellType

최신 SpreadWinform은 24종에 달하는 CellType 유형을 제공하지만 대각선은 포함되어 있지 않습니다. 그러나 코딩으로 LineShape을 통하여 아래와 같은 대각선이 포함된 Spread를 보여 줄 수 있습니다.

다음은 그 과정을 자세히 설명하겠습니다.
Spread 머리글에 대각선+머리글 텍스트를 입력해야 합니다.
우선 1개의 대각선 라인을 그리는 소스 입니다.

//Diagonal_2Region
            DiagonalCellType ct = new DiagonalCellType(DiagonalSubCellType.e2Region);
            this.fpSpread1.ActiveSheet.Cells[1, 0].CellType = ct;            
            ct.SetText("제품", StringAlignment.Far);
            ct.SetText("날짜", StringAlignment.Near, StringFormatFlags.DirectionVertical);            
            this.fpSpread1.ActiveSheet.Cells[1, 0].BackColor = Color.Green;
            this.fpSpread1.ActiveSheet.Cells[1, 0].Font = new Font("宋体", 12);
            this.fpSpread1.ActiveSheet.Cells[1, 0].ForeColor = Color.Blue; //line
            this.fpSpread1.ActiveSheet.Cells[1, 0].CellPadding = new CellPadding(5);


  public class DiagonalCellType : FarPoint.Win.Spread.CellType.TextCellType
    {
        #region CTOR
        SubDiagonalCellTypeBase m_cellType = null;
        public DiagonalCellType(DiagonalSubCellType subType)
        {
            m_cellType = SubDiagonalCellTypeBase.CreateSubType(subType);
        }
        #endregion

        public void SetText(string text, StringAlignment sstringAlignment = StringAlignment.Near, gFormatFlags ssStringFormatFlags = StringFormatFlags.NoClip)
        {
            m_cellType.SetText(text, sstringAlignment, ssStringFormatFlags);
        }

        public override void PaintCell(Graphics g, Rectangle r, Appearance appearance, object value, bool ected, bool isLocked, float zoomFactor)
        {
            m_cellType.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
        }

        public override System.Windows.Forms.Control GetEditorControl(System.Windows.Forms.Control parent, rance appearance, float zoomFactor)
        {
            return null;
        }
    }

2개의 대각선을 그리는 소스입니다.

public class SubDiagonalCellType_2Region : SubDiagonalCellTypeBase
    {
        public override void InnerPaintCell(Graphics g, Rectangle r, Appearance appearance, object value, isSelected, bool isLocked, float zoomFactor)
        {
            //line 1
            g.DrawLine(LinePen, r.X, r.Y, r.X + r.Width, r.Y + r.Height);

            //text 1
            SizeF sf = m_TextList[0].GetSizeF(g, appearance);
            float x = r.X + r.Width/2 - sf.Width - appearance.CellPadding.Left;
            float y = r.Y + appearance.CellPadding.Top;
            RectangleF rr = new RectangleF(x, y, r.Right - x - appearance.CellPadding.Left, sf.Height);
           // g.FillRectangle(new SolidBrush(Color.White), rr); //Test Rectangle Size
            m_TextList[0].DrawString(g, rr, appearance);

            //text 2
            sf = m_TextList[1].GetSizeF(g, appearance);
            y = r.Y + r.Height - sf.Height - appearance.CellPadding.Bottom;
            x = r.X + appearance.CellPadding.Left;
            rr = new RectangleF(x, y, r.Width / 2 , sf.Height);
           // g.FillRectangle(new SolidBrush(Color.White), rr); //Test Rectangle Size
            m_TextList[1].DrawString(g, rr, appearance);
        }

다음의 코드를 통해 라인에 들어갈 인자를 검증할 수 있습니다.

protected override void ValidateData()
        {
            if (m_TextList.Count != 2)
            {
                throw new Exception("must SetText twice");
            }
        }

        public override DiagonalSubCellType DiagonalSubCellType
        {
            get { return DiagonalSubCellType.e2Region; }
        }
    }

샘플 다운로드



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