퇴근5분전


훈스 C# 게시판에 올라온 질문에 대한 답글로 잠깐 만들어서 답글을 했던 내용임.

ComboBox에 바인딩하고 이값에 대한 값을 처리할때 단위데이타를 만들고 이에 대한 집합을 만들어
콤보 박스에 바인딩해주면 나중에 단위데이타가 여럿 일 경우 해당 단위데이타 상태까지도 컨트롤 가능해짐 .

예제에는 ComboBox 1개, TextBox 1개
             ComboBox.SelectedIndexChanged 이벤트

소스 ~~~


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            ComboList clist = new ComboList();
            clist.Add("A", "1");
            clist.Add("B", "2");
            clist.Add("C", "3");
            clist.Add("D", "4");

            comboBox1.DataSource = clist;              // IListSource를 요구함.
            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "Value";
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.textBox1.Text = ((_ComboItem)comboBox1.SelectedItem).Value;
           // 바인딩 된 Item을 가지고 처리 하므로 단위 아이템의 프로퍼티 갯수는 증감할 수 있음.
        }
    }


    public class _ComboItem  // 단위 아이템
    {
       public string Name { get; set; }
       public string Value { get; set; }

       public override string ToString()
       {
           return Name; // combobox에 디스플레이 됨.
       }
    }

    public class ComboList : IListSource  // 집합아이템
    {
        List<_ComboItem> items = new List<_ComboItem>();

        public void Add(string _Name, string _Value)
        {
            items.Add(new _ComboItem() { Name = _Name, Value = _Value });
            // 2005에서는 _ComboItem에 생성자로 파라미터를 받으면 됨.
        }

        public string this[string Name] 
// 인덱서를 이용하여 단위데이타에 대한 추적이 객체명[ 단위데이타이름 ]으로 가능.
        {
            get {
                string returnValue = string.Empty;

                foreach (_ComboItem item in items)
                {
                    if (item.Name == Name)
                    {
                        returnValue = item.Value;
                        break;
                    }
                }

                return returnValue;
           
            }
        }

        #region IListSource 멤버

        public bool ContainsListCollection
        {
            get { return true; }
        }

        public System.Collections.IList GetList()
        {
            return items;
        }

        #endregion
    }

}

// 여기서 빠진거라면 단위데이타를 제거하는 Dispose와 Clear 기능임.  빠진다고 해서 그닥.. 큰 영향은 없는듯도 하고..
// 많아 진다면... 구현해주는게 좀더 나을것 같다.