ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내가 쓰려고 만든 C# 윈폼 템플릿(콤보박스 데이터 바인딩)
    C# 2020. 9. 15. 13:42

    콤보박스 리스트형태로 쓰기

            List<ComboBox> list_cbobox;
    
    list_cbobox = new List<ComboBox>() { B_cboCOMP_NM, B_cboCUSTOMER_CODE, B_cboPLANT_NM, B_cboUNIT , B_cboBUY_MANAGER,B_cboSTOCK_MANAGER};
    
    
            List<TextBox> list_txtbox;
    
    list_txtbox = new List<TextBox>() {  B_txtBUY_QTY, B_txtLTIME, B_txtORDER_QTY_MIN, B_txtPART_NM, B_txtPART_NO, B_txtPRICE, B_txtRMK, B_txtSAFTSR };
    

     

    리스트 형태로 enable disable 메서드

    private void DisableControl()
            {
                foreach (var item in list_txtbox)
                {
                    item.Enabled = false;
                }
                foreach (var item in list_cbobox)
                {
                    item.Enabled = false;
                }
                B_dateORDER_DATE.Enabled = false;
            }
            private void EnableControl()
            {
                foreach (var item in list_txtbox)
                {
                    item.Enabled = true;
                }
                foreach (var item in list_cbobox)
                {
                    item.Enabled = true;
                }
                B_dateORDER_DATE.Enabled = true;
            }

     

    1. 딕셔너리 형태로 콤보박스에 바인딩

    using (SqlConnection conn = new SqlConnection(Commons.CONNSTRING))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    cmd.CommandText = " SELECT COMP_CD,COMP_NM FROM CIS_COMP ";
                    SqlDataReader reader = cmd.ExecuteReader();
    
                    Dictionary<string, string> temps = new Dictionary<string, string>();
                    temps.Add("전체", "전체"); //첫 항목에 전체 혹은 선택
                    while (reader.Read())
                    {
                        temps.Add(reader[0].ToString(), reader[1].ToString());
                    }
    
                    A_cboCOMP_NM.DataSource = new BindingSource(temps, null);
                    A_cboCOMP_NM.ValueMember = "Key";
                    A_cboCOMP_NM.DisplayMember = "Value";
                    A_cboCOMP_NM.SelectedIndex = 0;
                }

    2. 콤보박스에 하나씩 Item 추가

    forech(var item in Cbo)
    {
        combobox.Items.Add(넣고싶은거)
    }

    3. 콤보박스 바인딩 해제

    B_cboPLANT_NM.DataSource = null;
    B_cboPLANT_NM.Refresh();
    

    4. 이전 항목의 콤보박스의 조건을 따라가는 콤보박스

    콤보박스 클릭 시 기존 데이터 소스  해제 새로운 데이터 소스 바인딩 WHERE조건절에 근거

    private void B_cboPLANT_NM_MouseClick(object sender, MouseEventArgs e)
            {
                if (B_cboCOMP_NM.SelectedIndex == 0)
                {
                    B_cboPLANT_NM.DataSource = null;
                    B_cboPLANT_NM.Refresh();
                    if (B_cboPLANT_NM.Items.Count < 1)
                        B_cboPLANT_NM.Items.Add("선택");
                    B_cboPLANT_NM.SelectedIndex = 0;
                }
                //공장명
                else if (B_cboCOMP_NM.SelectedIndex != 0)
                {
                    using (SqlConnection conn = new SqlConnection(Commons.CONNSTRING))
                    {
                        conn.Open();
                        SqlCommand cmd = new SqlCommand();
                        cmd.Connection = conn;
                        cmd.CommandText = " SELECT PLANT_CD,PLANT_NM FROM CIS_PLANT WHERE COMP_CD = @COMP_CD";
                        
    
                        SqlParameter paramCity = new SqlParameter("@COMP_CD", SqlDbType.VarChar, 20);
                        paramCity.Value = B_cboCOMP_NM.SelectedValue.ToString();
                        cmd.Parameters.Add(paramCity);
    
                        SqlDataReader reader = cmd.ExecuteReader();
    
                        Dictionary<string, string> temps = new Dictionary<string, string>();
                        temps.Add("선택", "선택");
                        while (reader.Read())
                        {
                            temps.Add(reader[0].ToString(), reader[1].ToString());
                        }
    
                        B_cboPLANT_NM.DataSource = new BindingSource(temps, null);
                        B_cboPLANT_NM.ValueMember = "Key";
                        B_cboPLANT_NM.DisplayMember = "Value";
                        B_cboPLANT_NM.SelectedIndex = 0;
    
                    }
                }
            }

     

    공장 이름과 공장코드를 예로 들때

    눈에 보이는 DisplayMember는 공장이름, ValueMember는 공장코드로 바인딩 되었기 때문에

    Combobox1.SelectedValue.ToString()

    으로 매개변수를 주면된다. 위와 같이 되면 선택한 공장코드가 출력된다.

Designed by Tistory.