티스토리 뷰
목차
C# ListBox 리스트박스 사용법과 예제 (DB 바운딩, List 응용 등)
C# 리스트박스를 사용하여 원하는 항목 중 일부를 사용자에게 보여줄 수 있습니다.
[System.Windows.Forms 클래스] ListBox 선택된 항목 띄우기
보여주거나 선택하는 기능 외에도 목록을 편집할 수 있는 기능도 있습니다. Add 함수로 ListBox의 맨 끝에 목록을 추가할 수 있습니다.
1 | listBox1.Items.Add ("Sunday"); | cs |
C# 리스트박스에서 선택한 하나의 항목을 변수처럼 사용하려면 아래와 같이 코드를 작성할 수 있습니다.
1 2 | string var; var = listBox1.Text; | cs |
SelectionMode 속성은 선택할 수 있는 아이템이 한 개인지 여러 개인지 나타냅니다. 속성값을 Multiple Select로 변경하면 많은 아이템을 선택할 수 있죠.
1 | listBox1.SelectionMode = SelectionMode.MultiSimple; | cs |
아래 예제는 윈도우 폼을 로드할 때 리트스 박스에 요일을 추가한 뒤, 다중 선택을 할 수 있도록 설정합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | using System; using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { listBox1.Items.Add("Sunday"); listBox1.Items.Add("Monday"); listBox1.Items.Add("Tuesday"); listBox1.Items.Add("Wednesday"); listBox1.Items.Add("Thursday"); listBox1.Items.Add("Friday"); listBox1.Items.Add("Saturday"); listBox1.SelectionMode = SelectionMode.MultiSimple; } private void button1_Click(object sender, EventArgs e) { foreach (Object obj in listBox1.SelectedItems ) { MessageBox.Show(obj.ToString ()); } } } } | cs |
C# 리스트박스에 리스트를 바인딩하는 방법
먼저 List 객체를 생성하고 그곳에 데이터를 추가합니다.
1 2 3 4 5 | List<string> nList = new List<string>(); nList.Add("January"); nList.Add("February"); nList.Add("March"); nList.Add("April"); | cs |
[System.Windows.Forms 클래스] ListBox 데이터 바인딩
이어서, DataSource 속성을 이용해 List를 ListBox에 바인딩합니다.
1 | listBox1.DataSource = nList; | cs |
전체 소스
1 2 3 4 5 6 7 8 9 | private void button1_Click(object sender, EventArgs e) { List<string> nList = new List<string>(); nList.Add("January"); nList.Add("February"); nList.Add("March"); nList.Add("April"); listBox1.DataSource = nList; } | cs |
C# 리스트박스에 데이터베이스 바인딩하는 방법
먼저 connection와 fetch를 할 수 있도록 쿼리문을 작성합니다.
1 2 3 4 5 6 | connetionString = "Data Source=ServerName; Initial Catalog=databasename; User ID=userid; Password=yourpassword"; sql = "select au_id,au_lname from authors"; | cs |
이어서, 리스트박스의 datasource를 DB의 것으로 설정합니다.
1 2 3 | listBox1.DataSource = ds.Tables[0]; listBox1.ValueMember = "au_id"; listBox1.DisplayMember = "au_lname"; | cs |
[System.Windows.Forms 클래스] ListBox DB 데이터 바인딩
전체 소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string connetionString = null; SqlConnection connection; SqlCommand command; SqlDataAdapter adapter = new SqlDataAdapter(); DataSet ds = new DataSet(); int i = 0; string sql = null; //connetionString = "Data Source=ServerName;Initial Catalog=databasename;User ID=userid;Password=yourpassword"; //sql = "select au_id,au_lname from authors"; connection = new SqlConnection(connetionString); try { connection.Open(); command = new SqlCommand(sql, connection); adapter.SelectCommand = command; adapter.Fill(ds); adapter.Dispose(); command.Dispose(); connection.Close(); listBox1.DataSource = ds.Tables[0]; listBox1.ValueMember = "au_id"; listBox1.DisplayMember = "au_lname"; } catch (Exception ex) { MessageBox.Show("Cannot open connection ! "); } } } } | cs |
ListBox의 DataSource를 갱신하는 방법
C# 리스트박스 - 이미 반영된 데이터 소스를 삭제하는 방법
리스트박스가 DataSource를 바인딩했다면, 이를 null로 바꿔야 합니다.
1 | listBox1.DataSource = null; | cs |
SelectedIndexChanged 이벤트 사용 방법
이 이벤트는 사용자가 선택한 아이템이 변경되면 발생합니다. 속성 창에서 SelectedIndexChanged 항목을 찾아보세요.
[System.Windows.Forms 클래스] SelectedIndexChanged 창
해당 항목을 더블 클릭하면 자동으로 이벤트 함수가 생성됩니다.
1 2 3 4 | private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } | cs |
다음 예제에선 SelectedIndexChanged 이벤트를 발생시키는 방법을 살펴봅니다.
[System.Windows.Forms 클래스] SelectedIndexChanged 소스 코드
먼저 C# 리스트박스 두 개를 폼에 생성합니다. 그리고 아래처럼 첫 번째 리스트박스의 DataSource에 List를 바인딩합니다.
1 2 3 | List<string> nList = new List<string>(); nList.Add("First Quarter"); nList.Add("Second Quarter"); | cs |
프로그램을 처음 실행하면 첫 번째 리스트박스에 데이터가 채워지고, 항목에 맞춰 두 번째 리스트박스에도 데이터가 채워집니다.
아래 코드에 구현 방법이 나와 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; using System.Collections.Generic; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } List < string > fQ = new List < string > (); List < string > sQ = new List < string > (); private void Form1_Load(object sender, EventArgs e) { fQ.Add("January"); fQ.Add("February"); fQ.Add("March"); sQ.Add("April"); sQ.Add("May"); sQ.Add("June"); List < string > nList = new List < string > (); nList.Add("First Quarter"); nList.Add("Second Quarter"); listBox1.DataSource = nList; } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (listBox1.SelectedIndex == 0) { listBox2.DataSource = null; listBox2.DataSource = fQ; } else if (listBox1.SelectedIndex == 1) { listBox2.DataSource = null; listBox2.DataSource = sQ; } } } } | cs |
관련 글
C# 파일과 폴더, 드래그 앤 드롭 예제 (마우스 Drag Listview)
C# Invoke로 크로스 스레드 해결, 간략한 소스 응용 [C#강좌]
C# HttpWebRequest, HttpWebResponse 삭제된 블로그 URL 찾기
C# MFC 차이 비교 - part 1 (table) (연동에 필요한 정보)