c# List를 ListBox에 바인드하기

List는 ListBox와 DataGridView에 바인드할 수 있다. ListBox는 단순하여 그 쓸모가 제한적이므로 실무에서 자주 이용되지는 않는다.

ListBox는 ListControl을 상속하며 ListControl은 ListBox와 ComboBox로 파생된다. ListBox와 ComboBox는 형제로서 전자는 후자를 드롭 다운한 형태로 보면 된다. 원칙적으로 ComboBox처럼 하나의 열만 가질 수 있고 예외적으로 MultiColumn 프라퍼티를 참으로 하여 여러 열들을 가질 수 있다. 그러나 이는 여러 개의 관념적인 열들을 출력하는 게 아니라 하나의 열이 길어서 아래가 잘릴 때 잘리는 부분을 오른쪽으로 옮겨 출력하는 거다. 수직 스크롤을 하지 않게 하기 위한 기능에 불과하다.

아래는 두 개의 필드들을 갖는 클래스 리스트를 ListBox에 바인드하는 예제다. 이들 필드들 가운데 하나만 출력할 수 있으며 DisplayMember 프라퍼티를 통해 출력할 필드를 결정한다.

class Class1
{
    public string String { get; set; }
    public int Int { get; set; }
}

List<Class1> class1s = new();

private void Form1_Load(object sender, EventArgs e)
{
    class1s.Add(new Class1 { String = "abcde", Int = 12345 });
    class1s.Add(new Class1 { String = "qwert", Int = 67890 });
}

private void button1_Click(object sender, EventArgs e)
{
    listBox1.DataSource = class1s;

    listBox1.DisplayMember = "String";
}

아래와 같이 하면 원하는 결과는 출력되지 않는다.

private void button2_Click(object sender, EventArgs e)
{
    listBox1.DataSource = class1s;
}

리스트의 내용을 바인드하여 출력하려 할 때에는 일반적으로 BindingList와 DataGridView를 쓴다.