본문 바로가기
📁 [4] 개발자 정보 & 코드 노트/C#

C# Windows Forms 강의 99편: 스프레드시트 애플리케이션 제작 - DataGridView를 활용한 데이터 입력 및 계산

by wawManager 2025. 5. 13.

반응형

 

1. 강의 개요

이번 강의에서는 DataGridView를 활용하여 간단한 스프레드시트를 제작합니다.
스프레드시트는 데이터를 입력하고, 계산 및 합계를 보여주는 데 유용한 도구입니다.
이 강의에서는 DataGridView를 사용하여 데이터 입력, 계산 기능,
그리고 합계를 표시하는 방법을 학습합니다.


2. 학습 목표

  • DataGridView를 활용한 데이터 입력 및 관리
  • 열별 합계를 계산하고 표시하는 기능 구현
  • 동적으로 데이터를 수정하면 실시간으로 계산 결과 갱신
  • 사용자 친화적인 스프레드시트 UI 구성

3. 기능 요구사항

필수 기능

1️⃣ 데이터 입력:

  • DataGridView를 통해 데이터를 입력

2️⃣ 자동 합계 계산:

  • 특정 열의 값을 합산하여 결과 표시

3️⃣ 실시간 업데이트:

  • 데이터 수정 시 자동으로 합계 갱신

4️⃣ 합계 표시:

  • DataGridView 하단에 합계를 표시

4. 실습: 스프레드시트 애플리케이션 제작

1️⃣ 폼 구성

  • 폼(Form) 이름: Form1
  • 컨트롤 배치:

컨트롤 타입 이름 위치 크기

DataGridView dgvData 폼 상단 전체 (600 x 300)
Label lblSum 폼 하단 왼쪽 (200 x 30)
Button btnCalculate 폼 하단 오른쪽 (100 x 30)

📌 폼 디자인 예시:

--------------------------------------------------
|         [DataGridView - 데이터 입력]           |
--------------------------------------------------
| [합계 표시 Label]                      [Calculate 버튼] |
--------------------------------------------------

2️⃣ 코드 작성

(1) DataGridView 초기화

using System;
using System.Windows.Forms;

namespace WindowsFormsApp_Spreadsheet
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitializeDataGridView();
        }

        // DataGridView 초기화
        private void InitializeDataGridView()
        {
            dgvData.ColumnCount = 3; // 3개의 열 생성
            dgvData.Columns[0].Name = "항목";
            dgvData.Columns[1].Name = "수량";
            dgvData.Columns[2].Name = "가격";

            dgvData.AllowUserToAddRows = true; // 사용자가 행 추가 가능
            dgvData.CellValueChanged += DgvData_CellValueChanged;
        }

        // 셀 값 변경 시 합계 업데이트
        private void DgvData_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            CalculateSum();
        }
    }
}

(2) 합계 계산 기능

        // 합계 계산
        private void CalculateSum()
        {
            decimal sum = 0;

            foreach (DataGridViewRow row in dgvData.Rows)
            {
                if (row.IsNewRow) continue; // 새 행 무시

                if (decimal.TryParse(row.Cells[1].Value?.ToString(), out decimal quantity) &&
                    decimal.TryParse(row.Cells[2].Value?.ToString(), out decimal price))
                {
                    sum += quantity * price;
                }
            }

            lblSum.Text = $"총 합계: {sum:C}"; // 통화 형식으로 표시
        }

        // 수동으로 계산 버튼 클릭 시 실행
        private void btnCalculate_Click(object sender, EventArgs e)
        {
            CalculateSum();
        }

(3) Designer 코드

        private void InitializeComponent()
        {
            this.dgvData = new DataGridView();
            this.lblSum = new Label();
            this.btnCalculate = new Button();

            // DataGridView 설정
            this.dgvData.Location = new System.Drawing.Point(10, 10);
            this.dgvData.Size = new System.Drawing.Size(600, 300);

            // 합계 Label 설정
            this.lblSum.Location = new System.Drawing.Point(10, 320);
            this.lblSum.Size = new System.Drawing.Size(200, 30);
            this.lblSum.Text = "총 합계: 0";

            // Calculate Button 설정
            this.btnCalculate.Location = new System.Drawing.Point(520, 320);
            this.btnCalculate.Size = new System.Drawing.Size(100, 30);
            this.btnCalculate.Text = "Calculate";
            this.btnCalculate.Click += new EventHandler(this.btnCalculate_Click);

            // Form 설정
            this.ClientSize = new System.Drawing.Size(640, 360);
            this.Controls.Add(this.dgvData);
            this.Controls.Add(this.lblSum);
            this.Controls.Add(this.btnCalculate);
            this.Text = "스프레드시트 애플리케이션";
        }

3️⃣ 실행 결과

1️⃣ 데이터 입력

  • DataGridView에 항목, 수량, 가격 입력

2️⃣ 자동 합계 계산

  • 데이터를 입력하거나 수정할 때 합계가 자동 업데이트

3️⃣ 합계 수동 계산

  • "Calculate" 버튼 클릭 시 현재 입력된 데이터를 기반으로 합계 계산

5. 주요 개념 요약

  • DataGridView: 데이터를 시각적으로 입력 및 관리
  • CellValueChanged 이벤트: 데이터가 변경될 때 실행되는 이벤트
  • decimal.TryParse: 문자열을 숫자로 안전하게 변환
  • Label: 계산 결과를 사용자에게 표시

 

 

📌 #CSharp #WindowsForms #DataGridView #스프레드시트 #자동합계 #데이터입력

반응형