C# 컨트롤(Control)값을 동적으로 호출하여, 값 세팅하기
마스터욱
0
63
0
0
2018-10-14 23:33:00
각 컨트롤들의 Name값은 어떤 특정한 넘버링 패턴을 가지고 있는 상황이었다.
Name_1
Name_2
Name_3
...
..
.
위와 같이 말이다.
이런 상황에서 데이터베이스에 저장되어 있는 값들을 위 각각의 값에 세팅할때, 일일이 1,2,3번을 모두 각각 호출하여 값을 세팅하는 것이 비효율적이라는 것은 개발자라면 누구나 동감할 것이다.
로직을 바꾸고 싶지만, 메소드를 파악하는 것이 쉬운일은 아니다. 하지만 이 방법을 알려주는 건 위대하신 구글횽과 스텍이횽이다.
2시간이나 삽질하고 연구하면서 결국 아래와 같은 소스를 완성하였다.
- private void getConfig(string PushTitle)
- {
- using (SqlConnection conn = new SqlConnection(DBString))
- {
- conn.Open();
- SqlCommand cmd = new SqlCommand();
- cmd.Connection = conn;
- string sql = "SELECT * FROM 알람로그.dbo.Config WHERE PushTitle = '" + PushTitle + "'";
- cmd.CommandText = sql;
- var dr = cmd.ExecuteReader();
- ComboBox bunbong_ctrl = new ComboBox();
- TextBox enver_start_ctrl = new TextBox();
- TextBox enver_end_ctrl = new TextBox();
- TextBox enver_trade_ctrl = new TextBox();
- TextBox alarm_interval_ctrl = new TextBox();
- foreach (Control item in Controls)
- {
- if (item is GroupBox)
- {
- if (item.Name == "GroupBox_1")
- {
- foreach (Control ctrl in item.Controls)
- {
- if (ctrl.Name.Contains("bunbong"))
- {
- bunbong_ctrl = ctrl as ComboBox;
- }
- else if(ctrl.Name.Contains("enver_start"))
- {
- enver_start_ctrl = ctrl as TextBox;
- }
- else if (ctrl.Name.Contains("enver_end"))
- {
- enver_end_ctrl = ctrl as TextBox;
- }
- else if (ctrl.Name.Contains("enver_trade"))
- {
- enver_trade_ctrl = ctrl as TextBox;
- }
- else if (ctrl.Name.Contains("alarm_interval"))
- {
- alarm_interval_ctrl = ctrl as TextBox;
- }
- }
- break;
- }
- }
- }
- if (dr.Read())
- {
- bunbong_ctrl.SelectedItem = dr["bunbong"].ToString();
- enver_start_ctrl.Text = dr["enver_start"].ToString();
- enver_end_ctrl.Text = dr["enver_end"].ToString();
- enver_trade_ctrl.Text = dr["enver_trade"].ToString();
- alarm_interval_ctrl.Text = dr["alarm_interval"].ToString();
- }
- conn.Close();
- }
- }