**본 글은 DevExpress 컴포넌트를 이용한 경우에만 참고 할 수 있다.
테스트에 사용된 데이터
SearchLookupEdit란?
콤보박스(ComboBox)의 형태를 가지고 있지만,
한개의 목록만 표시 및 선택 할 수 있는 콤보박스(ComboBox)의 형태와는 달리
목록을 테이블 형태로 표시하고, 해당 테이블 내에서 검색도 가능하다.
데이터 입력하기
SearchLookupEdit의 데이터는 DataTable을 통해서 바인딩 처리를 할 수 있다.
입력하고자 하는 데이터를 DataTable로 만들고 아래와 같이 한줄로 데이터를 바인딩한다.
DataTable dt = new DataTable();
/*
dt 데이터 입력
*/
searchLookUpEdit1.Properties.DataSource = dt;
필드명(컬럼명) 변경하기
바인딩 하는 DataTable에 별도 Caption 설정이 되어있지 않으면,
DataTable의 컬럼이 그대로 표시된다.
DataTable dt = new DataTable();
dt.Columns.Add("Item");
dt.Columns.Add("Price");
dt.Columns.Add("Stock");
dt.Rows.Add("바나나", "500원", "5개");
dt.Rows.Add("사과", "1000원", "10개");
dt.Rows.Add("딸기", "650만원", "12개");
searchLookUpEdit1.Properties.DataSource = dt;
필드명을 변경하기위해서는 DataTable에 미리 Caption설정을 하고 바인딩 한다.
DataTable dt = new DataTable();
dt.Columns.Add("Item");
dt.Columns.Add("Price");
dt.Columns.Add("Stock");
dt.Columns["item"].Caption = "품목";
dt.Columns["Price"].Caption = "금액";
dt.Columns["Stock"].Caption = "재고";
dt.Rows.Add("바나나", "500원", "5개");
dt.Rows.Add("사과", "1000원", "10개");
dt.Rows.Add("딸기", "650만원", "12개");
searchLookUpEdit1.Properties.DataSource = dt;
데이터 가져오기
위 처럼 데이터만 바인딩하고 프로그램을 실행하면, 원하는 데이터를 클릭해도 선택된 데이터가 표시 되지않습니다.
아래 코드를 이용해 SearchLookupEdit의 설정을 변경한다.
searchLookUpEdit1.Properties.ValueMember = "Price"; //선택된 목록의 컬럼
searchLookUpEdit1.Properties.DisplayMember = "Item"; //선택된 목록을 표시해주는 컬럼
searchLookUpEdit1.Properties.NullText = "품목 선택"; //선택이 안 된 경우 표시될 텍스트
버튼하나를 생성하여 SearchLookupEdit에 선택된 실제데이터를 확인 해보자.
private void button1_Click(object sender, EventArgs e)
{
string msg = $"선택된 데이터의 EditValue 는 {searchLookUpEdit1.EditValue.ToString()} 입니다.\n"
+ $"선택된 데이터의 DisplayValue 는 {searchLookUpEdit1.Text.ToString()} 입니다.";
MessageBox.Show(msg);
}
데이터를 선택한 경우, 사용자에게 표시해야되는 정보와 프로그램적으로 사용되는 정보를 구분지어서 사용 하게 된다.
(ex: ValueMember 에는 코드를 설정하고 DisplayValue에는 품목명을 표시하여, 사용자는 품목으로 볼수 있지만 프로그램적으로는 코드를 가지고 데이터를 관리)
선택된 행의 다른 데이터들도 가져오기
위 내용 까지 코딩을 마무리 했다면, 재고정보까지는 데이터를 불러 올 수 없다.
EditValue외에 다른 데이터를 가져오기 위해서는 아래 처럼 코드를 작성하자.
private void button1_Click(object sender, EventArgs e)
{
//editValue 값으로 Row행 가져오기
DataRowView row = searchLookUpEdit1.Properties.GetRowByKeyValue(searchLookUpEdit1.EditValue) as DataRowView;
//row행의 [컬럼명] 데이터 가져오기
string stock = row["Stock"].ToString();
string msg = $"선택된 제품의 가격은 {searchLookUpEdit1.EditValue.ToString()} 입니다.\n"
+ $"선택된 제품 이름은 {searchLookUpEdit1.Text.ToString()} 입니다.\n"
+ $"재고는 {stock}입니다.";
MessageBox.Show(msg);
}
끝.
'C# > winform' 카테고리의 다른 글
[C#][WinForm][Dev]GridControl/GridView에 특정 행을 색으로 표시하기 (0) | 2021.06.29 |
---|---|
[C#][WinForm][Dev]DataTable로 GridControl/GridView에 데이터 추가하기 (0) | 2021.06.28 |
[DateTimePicker]날짜를 원하는 형식으로 변환하기 (0) | 2021.03.02 |
[DATATABLE]SELECT로 ROW 인덱스 구하기(feat.DataGridView) (0) | 2021.02.28 |
[DataGridView]클릭한 데이터 텍스트박스로 가져오기 (0) | 2021.02.26 |