컴퓨터/c#

c# ComboBox 데이터(Item) 추가하기 (Display Member, Value Member)

k1asd1 2021. 7. 23. 18:07
728x90
반응형

기본 콤보박스의 보이는 데이터(Display Member)는 사용자의 이해를 돕기 위해 필요하고 쿼리문이나 기타 필요시 내부적으로 쓰일 데이터(Value Member)를 사용해야 할 때가 있습니다. 물론 저도 필요해서 찾다가 기록으로 남기면 좋을 듯하여 정리해봅니다.

 

예를 들어 화면상의 콤보박스를 선택했을 시 보이는 데이터는 '1'인데 쿼리문을 사용하거나 혹은 실제 내부적으로 필요한 데이터는 'one'일 경우 사용 가능합니다.


* 콤보박스의 일반적인 사용

// 초기화 및 데이터 추가

combobox.Items.Clear();
combobox.Items.Add("");
combobox.Items.Add("one");

// 데이터 가져올 때(설정도 가능)
string str = combobox.SelectedText

* 콤보박스 Display Member, Value Member 사용 1 

// 바인딩 리스트를 사용하기 위해 선언합니다.

private BindingList<object> cmbList = new BindingList<object>();

 

// 데이터 추가

cmbList.Add(new { Display = "1", Value = "one" });
cmbList.Add(new { Display = "2", Value = "two" });
cmbList.Add(new { Display = "3", Value = "three" });

combobox.DataSource = cmbList;
combobox.DisplayMember = "Display";
combobox.ValueMember = "Value";

 

// 데이터 가져올 때

string str = combobox.SelectedValue.ToString();


* 콤보박스 Display Member, Value Member 사용 2

//구조체 KeyValuePair를 사용하기 위해 System.Collections.Generic를 선언합니다.

 

using System.Collections.Generic;

 

// 데이터 추가

combobox.DisplayMember = "Display"; //보이는 데이터, 텍스트 변경 가능

combobox.ValueMember = "Value"; //내부적으로 쓰일 데이터, 텍스트 변경 가능

 

Dictionary<string, string>dic = new Dictionary<string, string>();

dic.Add("1", "one");

dic.Add("2", "two");

 

combobox.DataSource = items;

 

// 데이터 가져올 때

string str = ((KeyValuePair<string, string="">)combobox.SelectedItem.ToString()).Value;


* 콤보박스 Display Member, Value Member 사용 3 (보류)

//dynamic 예약어 사용을 위해 참조에 Microsoft.CSharp 추가 (nuget으로도 가능)

 

// 초기화 및 데이터 추가
combobox.DisplayMember = "Display"; //보이는 데이터, 텍스트 변경 가능
combobox.ValueMember = "Value"; //내부적으로 쓰일 데이터, 텍스트 변경 가능
combobox.Items.Add(new { Display = "1", Value = "one" });
combobox.Items.Add(new { Display = "2", Value = "two" });

// 데이터 가져올 때
string str = (combobox.SelectedItem as dynamic).Value;


* 콤보박스 Display Member, Value Member 사용 4 (보류)

//dynamic 예약어 사용을 위해 참조에 Microsoft.CSharp 추가 (nuget으로도 가능)

 

// 데이터 추가

combobox.DisplayMember = "Display"; //보이는 데이터, 텍스트 변경 가능

combobox.ValueMember = "Value"; //내부적으로 쓰일 데이터, 텍스트 변경 가능

 

var items = new[] {

     new { Display= "1", Value = "one" },

     new { Display= "2", Value = "two" },

};

 

cboTest.DataSource = items;

 

// 데이터 가져올 때

string str = (combobox.SelectedItem as dynamic).Value;


이상입니다.

728x90
반응형