๋ฐ˜์‘ํ˜•

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding)์ด๋ž€?

ํ˜น์‹œ WinForm UI ์ปจํŠธ๋กค ์ค‘ DataGridView๋‚˜ ListBox์—์„œ DataBinding ํ•ญ๋ชฉ์„ ๋ณธ ์ ์ด ์žˆ๋‚˜์š”? ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์€ UI ์ปจํŠธ๋กค๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์™€ UI ์ปจํŠธ๋กค์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ UI ์ปจํŠธ๋กค์ด ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋์„ ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์ผ์ด UI ์ปจํŠธ๋กค์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด์ฃ .

DataGridView ์†์„ฑ ํ™”๋ฉด

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋˜ ํ•˜๋‚˜์˜ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ UI ์ปจํŠธ๋กค์— ๋ฐ˜์˜ํ•  ๋•Œ ๋ฐ˜์‘ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด์ฃ .

๋ณธ๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ฌธ์ œ์ , ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ ์šฉํ•˜๋ฉด ์–ด๋–ค ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

DataGridView ์ปจํŠธ๋กค

DataGridView๋Š” ํ”ํžˆ ์—‘์…€์—์„œ ์…€์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ œ์ผ ์ฒซ ๋ฒˆ์งธ ํ–‰์—๋Š” ํ—ค๋” ํ–‰(Header row)์ด ์žˆ๊ณ , ๊ทธ ์•„๋ž˜๋กœ๋Š” ๋ฐ์ดํ„ฐ ํ–‰(Data row)์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ์ผ ๋งˆ์ง€๋ง‰ ํ–‰์—๋Š” ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

DataGridView ์ปจํŠธ๋กค์˜ ๋™์ž‘ ํ™”๋ฉด

์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด '์ด๋ฆ„'๊ณผ '๋‚˜์ด' ํ—ค๋”์— ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค.

private void btnCreateData_Click(object sender, EventArgs e)
{
    dataGridView1.Columns.Add("Column1", "์ด๋ฆ„");
    dataGridView1.Columns.Add("Column2", "๋‚˜์ด");

    dataGridView1.Rows.Add("์งฑ๊ตฌ", "22");
    dataGridView1.Rows.Add("์ฒ ์ˆ˜", "33");
}

๋™์ž‘์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„์ฃผ ๊ฐ„๋‹จํ•˜์ฃ ?

์ฝ”๋“œ ๋™์ž‘ ๊ฒฐ๊ณผ

๊ทธ๋Ÿผ ์ด๋ฒˆ์—๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ 5์ฒœ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ–‰(Row)์„ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜๋กœ Add()๊ฐ€ ์‚ฌ์šฉ๋์Šต๋‹ˆ๋‹ค.

private void btnCreateData_Click(object sender, EventArgs e)
{
    dataGridView1.Columns.Add("Column1", "์ด๋ฆ„");
    dataGridView1.Columns.Add("Column2", "๋‚˜์ด");

    for (int i = 0; i < 5000; i++)
    {
        dataGridView1.Rows.Add($"Name{i}", $"Age{i}");
    }
}

๊ทธ๋ฆฌ๊ณ  ๋™์ž‘ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ์•ฝ 1~2์ดˆ ์ •๋„์˜ ์ง€์—ฐ ํ›„ ์ปจํŠธ๋กค์— 5์ฒœ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋์Šต๋‹ˆ๋‹ค.

Add-ํ•จ์ˆ˜๋กœ-๋ฐ์ดํ„ฐ-์ถ”๊ฐ€ํ•œ-๊ฒฐ๊ณผ
Add ํ•จ์ˆ˜๋กœ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ํ•œ ๊ฒฐ๊ณผ

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์ด๋ฒˆ์—๋Š” ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. DataTable์„ ์‚ฌ์šฉํ•˜์—ฌ Column์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ดํ›„ Rows์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

private void btnDataBinding_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();

    dt.Columns.Add("Column1");
    dt.Columns.Add("Column2");

    for (int i = 0; i < 5000; i++)
    {
        dt.Rows.Add($"Name{i}", $"Age{i}");
    }

    dataGridView1.DataSource = dt;
}

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์ž๋งˆ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. Add() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์™€๋Š” ๋‹ค๋ฅธ ์†๋„์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ-๋ฐ”์ธ๋”ฉ์œผ๋กœ-์ถ”๊ฐ€ํ•œ-๊ฒฐ๊ณผ
๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๊ฒฐ๊ณผ

์ด์ฒ˜๋Ÿผ, ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค๊ณผ ์—ฐ๊ฒฐํ•  ๋•Œ ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•  ๋•Œ ์ž๋™์œผ๋กœ ์ปจํŠธ๋กค์ด ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋งจ ๋งˆ์ง€๋ง‰ ํ–‰์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๋งจ ์ฒ˜์Œ ํ–‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค.

private void btnAdd_Click(object sender, EventArgs e)
{
    DataTable dt = (DataTable)dataGridView1.DataSource;
    dt.Rows.Add($"Name{dt.Rows.Count}", $"Age{dt.Rows.Count}");
}

private void btnDelete_Click(object sender, EventArgs e)
{
    DataTable dt = (DataTable)dataGridView1.DataSource;
    dt.Rows.RemoveAt(0);
}

๋ฐ์ดํ„ฐ-์ถ”๊ฐ€&#44;-์‚ญ์ œ-๋™์ž‘
๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, ์‚ญ์ œ ๋™์ž‘

์ฃผ์˜ ์‚ฌํ•ญ

๋ฐ์ดํ„ฐ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” Add() ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฑฐํ•˜๋Š” Remove()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹๊ณผ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๋ฐฉ์‹์€ ๊ฐ™์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์ดํ›„ Add()๋‚˜ Remove()๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

private void btnMixed_Click(object sender, EventArgs e)
{
    try
    {
        DataTable dt = new DataTable();
        dataGridView1.DataSource = dt;

        dataGridView1.Rows.Add($"Name", $"Age");
    }
    catch(Exception exc)
    {
        MessageBox.Show(exc.Message);
    }
}

์˜ค๋ฅ˜

์ปจํŠธ๋กค์ด ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ๋œ ๊ฒฝ์šฐ์—๋Š” DataGridView์˜ ํ–‰ ์ปฌ๋ ‰์…˜์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ–‰์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ์•„๋‹ˆ๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ๋ฏธ๋ฆฌ ์„ ํƒํ•œ ํ›„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TestDataBinding.zip
0.02MB

๋ฐ˜์‘ํ˜•