728x90
반응형
728x170
▶ MainForm.cs
using System;
using System.Drawing;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.Load += Form_Load;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 폼 로드시 처리하기 - Form_Load(sender, e)
/// <summary>
/// 폼 로드시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_Load(object sender, EventArgs e)
{
this.dataGridView.Columns.Add("01월합계", "합계");
this.dataGridView.Columns.Add("01월평균", "평균");
this.dataGridView.Columns.Add("02월합계", "합계");
this.dataGridView.Columns.Add("02월평균", "평균");
this.dataGridView.Columns.Add("03월합계", "합계");
this.dataGridView.Columns.Add("03월평균", "평균");
this.dataGridView.Columns.Add("04월합계", "합계");
this.dataGridView.Columns.Add("04월평균", "평균");
this.dataGridView.Columns.Add("05월합계", "합계");
this.dataGridView.Columns.Add("05월평균", "평균");
for(int i = 0; i < this.dataGridView.ColumnCount; i++)
{
this.dataGridView.Columns[i].Width = 70;
}
this.dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
this.dataGridView.ColumnHeadersHeight = this.dataGridView.ColumnHeadersHeight * 2;
this.dataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
this.dataGridView.ColumnWidthChanged += dataGridView_ColumnWidthChanged;
this.dataGridView.Scroll += dataGridView_Scroll;
this.dataGridView.Paint += dataGridView_Paint;
this.dataGridView.CellPainting += dataGridView_CellPainting;
}
#endregion
#region 데이터 그리드 뷰 컬럼 너비 변경시 처리하기 - dataGridView_ColumnWidthChanged(sender, e)
/// <summary>
/// 데이터 그리드 뷰 컬럼 너비 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void dataGridView_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
Rectangle headerRectangle = this.dataGridView.DisplayRectangle;
headerRectangle.Height = this.dataGridView.ColumnHeadersHeight / 2;
this.dataGridView.Invalidate(headerRectangle);
}
#endregion
#region 데이터 그리드 뷰 스크롤시 처리하기 - dataGridView_Scroll(sender, e)
/// <summary>
/// 데이터 그리드 뷰 스크롤시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void dataGridView_Scroll(object sender, ScrollEventArgs e)
{
Rectangle parentHeaderRectangle = this.dataGridView.DisplayRectangle;
parentHeaderRectangle.Height = this.dataGridView.ColumnHeadersHeight / 2;
this.dataGridView.Invalidate(parentHeaderRectangle);
}
#endregion
#region 데이터 그리드 뷰 페인트시 처리하기 - dataGridView_Paint(sender, e)
/// <summary>
/// 데이터 그리드 뷰 페인트시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void dataGridView_Paint(object sender, PaintEventArgs e)
{
string[] parentHeaderArray = { "1월", "2월", "3월", "4월", "5월" };
for(int i = 0; i < 10; )
{
Rectangle cellRectangle = this.dataGridView.GetCellDisplayRectangle(i, -1, true);
int nextCellWidth = this.dataGridView.GetCellDisplayRectangle(i + 1, -1, true).Width;
cellRectangle.X += 1;
cellRectangle.Y += 1;
cellRectangle.Width = cellRectangle.Width + nextCellWidth - 2;
cellRectangle.Height = cellRectangle.Height / 2 - 2;
e.Graphics.FillRectangle(new SolidBrush(this.dataGridView.ColumnHeadersDefaultCellStyle.BackColor), cellRectangle);
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString
(
parentHeaderArray[i / 2],
this.dataGridView.ColumnHeadersDefaultCellStyle.Font,
new SolidBrush(this.dataGridView.ColumnHeadersDefaultCellStyle.ForeColor),
cellRectangle,
stringFormat
);
i += 2;
}
}
#endregion
#region 데이터 그리드 뷰 셀 페인트시 처리하기 - dataGridView_CellPainting(sender, e)
/// <summary>
/// 데이터 그리드 뷰 셀 페인트시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if(e.RowIndex == -1 && e.ColumnIndex > -1)
{
Rectangle cellRectangle = e.CellBounds;
cellRectangle.Y += e.CellBounds.Height / 2;
cellRectangle.Height = e.CellBounds.Height / 2;
e.PaintBackground(cellRectangle, true);
e.PaintContent(cellRectangle);
e.Handled = true;
}
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] 카메라 컨트롤 사용하기 (0) | 2018.02.18 |
---|---|
[C#/WINFORM] DataGridView 클래스 : 달력 컨트롤 컬럼 사용하기 (0) | 2018.02.18 |
[C#/WINFORM] DataGridView 클래스 : 동적 콤보 박스 사용하기 (0) | 2018.02.18 |
[C#/WINFORM] TreeView 클래스 : 동적 노드 생성하기 (0) | 2018.02.18 |
[C#/WINFORM] WPF 사용자 컨트롤 사용하기 (0) | 2018.02.17 |
[C#/WINFORM] DataGridView 클래스 : 드래그 & 드롭 사용하기 (0) | 2018.02.17 |
[C#/WINFORM] 파일 드래그 & 드롭 사용하기 (0) | 2018.02.17 |
[C#/WINFORM] MDI 스크롤바 제거하기 (0) | 2018.02.17 |
[C#/WINFORM] TreeView/ListView 더블 버퍼링 사용하기 (0) | 2018.02.16 |
[C#/WINFORM] 이미지 슬라이드 쇼 보여주기 (0) | 2018.02.15 |
댓글을 달아 주세요