C#/winform

[C#][WinForm][Dev]SearchLookupEdit 사용하기

ㅋㅋ! 2021. 6. 25. 17:04

**본 글은 DevExpress 컴포넌트를 이용한 경우에만 참고 할 수 있다.

 

테스트에 사용된 데이터

 

 


SearchLookupEdit란?

콤보박스(ComboBox)의 형태를 가지고 있지만,

한개의 목록만 표시 및 선택 할 수 있는 콤보박스(ComboBox)의 형태와는 달리

목록을 테이블 형태로 표시하고, 해당 테이블 내에서 검색도 가능하다.

 

WinForm의 콤보박스
DevExpress의 SearchLookupEdit


데이터 입력하기

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);
        }

 

 

끝.