퇴근5분전

사용자 삽입 이미지

데이타 테이블 내용 그대로를 그리는 메서드 곧 리포트 관련해서 테이블을 그려주거나
프린트용 도큐먼트에 그려줄때 바둑판그리기와 함께 내부에 글써주는 메서드를 만들었었음.

아래 소스를 실행하기 위해서 위 그림처럼 그리드 뷰 와 픽쳐박스, 버튼을 두고 작업하면 됨.
 public partial class Form1 : Form
    {
        DataTable dt = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void DrawTable(Graphics g, DataTable dt)
        {
            if (dt != null && g != null)
            {
                RectangleF rectF = new RectangleF(0f, 0f, 200f, 25f);
                float maxRowCount = Convert.ToInt32(dt.Rows.Count);
                float maxColCount = Convert.ToInt32(dt.Columns.Count);
                for (float y = 0.0f; y < maxRowCount; y += 1.0f)
                {
                    DataRow dr = dt.Rows[Convert.ToInt32(y)];
                    for (float x = 0.0f; x < maxColCount; x += 1.0f)
                    {
                        SizeF sf = g.MeasureString(dr[Convert.ToInt32(x)].ToString(), new Font("굴림체", 10.0f));
                        // 높이는 추후 조정..
                        g.DrawRectangle(new Pen(Color.Black, 1.0f), x * rectF.Width, y * rectF.Height, rectF.Width, rectF.Height);
                        g.DrawString(string.Format("{0:00} dr[{1:00}]: {2:00}", y, x, dr[Convert.ToInt32(x)]), new Font("굴림체", 10.0f), Brushes.Black, new RectangleF(x * rectF.Width + (sf.Width / 2), y * rectF.Height + sf.Height / 2, rectF.Width, rectF.Height));
                    }
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dt = new DataTable();
            dt.Columns.Add("A");
            dt.Columns.Add("B");

            dt.Rows.Add(1, 2);
            dt.Rows.Add(3, 4);
            dt.Rows.Add(5, 6);
            dt.Rows.Add(7, 8);

            dataGridView1.DataSource = dt;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if( dt != null ) DrawTable(Graphics.FromHwnd(pictureBox1.Handle), dt);
        }

    }