Winform의 ListBox에 바인딩 할 때

 

this.listBox.DataSource = sourceList; 와 같이 바로 제네릭 리스트와 같은 데이터를

 

바로 데이터 소스에 넣게 되면 제대로 동작하지 않습니다.

 

이럴 경우 먼저 데이터 소스에 null 값을 넣어준 다음

 

데이터를 데이터 소스에 넣어주게 되면 정상적으로 데이터가 들어갑니다.

 

아래 코드는 예제 소스 입니다.

#region SetListBoxControlData(sourceList) - 리스트 박스 컨트롤 데이터를 설정합니다.

/// <summary>
/// 리스트 박스 컨트롤 데이터를 설정합니다.
/// </summary>
/// <param name="sourceList">소스 리스트</param>
private void SetListBoxControlData(List<TimeModel> sourceList)
{
	this.recordListBox.DataSource = null;

	this.sourceList = sourceList;

	this.recordListBox.DataSource = this.sourceList;

	this.recordListBox.DisplayMember = "Time";

	this.recordListBox.Refresh();
}

#endregion

 

바로 전 포스팅에서는 데이터 소스에 바인딩 하여 컬럼명만 출력했다면


이번에는 객체에 값을 넣어 버튼을 클릭 했을 때 행을 추가하려고 합니다.


값이 입력된 객체를 List<SampleInfo> 에 넣고 이것을 GridControl의 DataSource에 반영하면 됩니다.


그리고 GridControl의 데이터 소스를 RefreshDataSource()를 이용하여 갱신 해주면 됩니다.


그래야 데이터소스를 새로 불러와 화면에 출력하기 때문입니다.


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
public partial class MainForm : Form
{
        private List<SampleInfo> sourceList;
        public MainForm()
        {
            InitializeComponent();
 
            #region 그리드 컨트롤을 초기화 합니다.
 
            this.sourceList = new List<SampleInfo>();
            this.resultGridControl.DataSource = this.sourceList;
 
            #endregion  
        }
}
 
private void simpleButton1_Click(object sender, EventArgs e)
{
            SampleInfo sampleInfo = new SampleInfo();
 
            sampleInfo.ID = "Kim";
            sampleInfo.Subject = "Subject";
            sampleInfo.CreateTime = DateTime.Now;
 
            this.sourceList.Add(sampleInfo);
 
            resultGridControl.RefreshDataSource();
 
}
 
public class SampleInfo
{
        public string ID { get; set; }
        public string Subject { get; set; }
        public DateTime CreateTime { get; set; }
}
cs


결과는 아래와 같이 나옵니다.



클래스에 있는 ID, Subject, CreateDate 를 List<T>를 이용하여 바인딩 하는 방법 입니다.


컬럼 이름들이 위의 객체에 있는 값의 이름으로 설정이 되며 객체를 생성하면서


추가 / 삭제 / 수정 이 가능합니다.


지금은 바인딩 하여 컬럼 이름만 출력되도록 하였습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class MainForm : Form
{
        private List<SampleInfo> sourceList;
        public MainForm()
        {
            InitializeComponent();
 
            #region 그리드 컨트롤을 초기화 합니다.
 
            this.sourceList = new List<SampleInfo>();
            this.resultGridControl.DataSource = this.sourceList;
 
            #endregion  
        }
}
 
public class SampleInfo
{
        public string ID { get; set; }
        public string Subject { get; set; }
        public DateTime CreateTime { get; set; }
}
cs



결과는 아래와 같이 출력됩니다.



+ Recent posts