2013-05-13 3 views
3

그룹 상자를 동적으로 만들려고하는데이 GB는 선택시 확인란에서 만듭니다.C에서 동적 그룹 상자를 만드는 방법

의미 첫 번째 CB를 선택한 다음 다른 동적 확인란과 함께 1GB를 만들면 5 번째 확인란을 선택해야합니다. 세 번째 검사를 선택하면 나머지 다른 확인란은 몇 개의 다른 확인란으로 만들어집니다. 이 코드는 제가 디자인 타임에 이미 생성 된 고정 그룹 박스에 대한 동적 체크 박스를 만들 수 있습니다.

내 시나리오는 - 5 지점에 여러 배치가 있습니다. 이제 사용자는 동적으로 체크 박스에서 브랜치를 선택할 것이고, 그 기준으로 각 브랜치에 대한 그룹 박스에 btaches가 표시 될 것입니다. BRANCH1 브랜치 브랜치 브랜치 Branch5 사용자 선택 3 다음 GB1 여기 Branch5의 일괄 을 제시해야한다 브랜치의 일괄 및 GB2을 보여줍니다 5 가지 코드 인 경우 -

private void RO_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     groupBox1.Controls.Clear(); 
     String m = RO.SelectedItem.ToString(); 
     Console.WriteLine(m); 
     aCommand2 = new OleDbCommand("select * from branch_tbl,region_tbl where branch_tbl.region_id=region_tbl.region_id and region_tbl.region_name LIKE '"+m +"'", main_connection); 
     aAdapter2 = new OleDbDataAdapter(aCommand2); 
     ds2 = new DataSet(); 
     aAdapter2.Fill(ds2, "app_info"); 
     ds2.Tables[0].Constraints.Add("pk_bno", ds2.Tables[0].Columns[0], true); 
     int bran_count = ds2.Tables[0].Rows.Count; 
     Console.WriteLine(bran_count); 
     checkBox = new System.Windows.Forms.CheckBox[bran_count]; 
     for (int i = 0; i < bran_count; ++i) 
     { 
      checkBox[i] = new CheckBox(); 
      checkBox[i].Name = "radio" + Convert.ToString(i); 
      checkBox[i].Text = ds2.Tables[0].Rows[i][2].ToString(); 
      checkBox[i].Location = new System.Drawing.Point(125 * i, 15); 
      groupBox1.Controls.Add(checkBox[i]); 
      checkBox[i].CheckStateChanged += new System.EventHandler(CheckBoxCheckedChanged); 
     } 
    } 
    int count = 1; 
    int position = 1; 
    //Code for handling event when branch check box is selected or unselected 
    private void CheckBoxCheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox c = (CheckBox)sender; 
     //Label myLabel; 
     String str = null; 
     if (c.Checked == true) 
     { 
      str = c.Text;    
      aCommand3 = new OleDbCommand("select * from batch_tbl where batch_branch LIKE '" + str + "'", main_connection); 
      aAdapter3 = new OleDbDataAdapter(aCommand3); 
      ds3 = new DataSet(); 
      aAdapter3.Fill(ds3, "app_info"); 
      ds3.Tables[0].Constraints.Add("pk_bno", ds3.Tables[0].Columns[0], true); 
      int batch_count = ds3.Tables[0].Rows.Count; 
      //filling the groupbox with batch code by generating dynamic checkboxes 
      for (int i = 0; i < batch_count; ++i) 
      { 
       checkBox[i] = new CheckBox(); 
       checkBox[i].Name = "check" + Convert.ToString(i); 
       checkBox[i].Text = ds3.Tables[0].Rows[i][1].ToString(); 
       Console.WriteLine(checkBox[i].Text); 
       checkBox[i].Location = new System.Drawing.Point(104*position, 30); 
       groupBox2.Text = c.Text; 
       groupBox2.Controls.Add(checkBox[i]); 
       position++; 
       count++; 
      } 
     } 
     else 
     { 
      count--; 
      this.Controls.RemoveByKey("lbl" + c.Name); 
      this.Update(); 
     } 
    } 

이 코드는 매우 잘하지만 얼마나 많은 몰라 브랜치 CB는 select를 사용합니다. 따라서 브랜치 체크 박스를 선택할 때 런타임에 GB를 생성해야하기 때문에 선택한 각 브랜치에 GB를 어떻게 할당 할 수 있습니까?

답변

1

문제를 생각한 후에 제 문제를 해결했습니다. 방금 동적 체크 박스를 생성하기 위해 수행 한 작업을 수행했습니다. 여기에 코드가 있습니다

 private void RO_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     groupBox1.Controls.Clear(); 
     String m = RO.SelectedItem.ToString(); 
     Console.WriteLine(m); 
     aCommand2 = new OleDbCommand("select * from branch_tbl,region_tbl where branch_tbl.region_id=region_tbl.region_id and region_tbl.region_name LIKE '" + m + "'", main_connection); 
     aAdapter2 = new OleDbDataAdapter(aCommand2); 
     ds2 = new DataSet(); 
     aAdapter2.Fill(ds2, "app_info"); 
     ds2.Tables[0].Constraints.Add("pk_bno", ds2.Tables[0].Columns[0], true); 
     int bran_count = ds2.Tables[0].Rows.Count; 
     Console.WriteLine(bran_count); 
     checkBox = new CheckBox[bran_count]; 

     for (int i = 0; i < bran_count; ++i) 
     { 
      checkBox[i] = new CheckBox(); 
      checkBox[i].Name = "radio" + Convert.ToString(i); 
      checkBox[i].Text = ds2.Tables[0].Rows[i][2].ToString(); 
      checkBox[i].Location = new System.Drawing.Point(125 * i, 15); 
      groupBox1.Controls.Add(checkBox[i]); 
      checkBox[i].CheckStateChanged += new System.EventHandler(CheckBoxCheckedChanged); 
     } 
     gpBox=new GroupBox[bran_count]; 
    } 
    String str = null; 
    int count = 1; 
    int gpcount = 1; 
    int position = 1; 
    int gpposition = 110; 
    //Code for handling event when branch check box is selected or unselected 

    private void CheckBoxCheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox c = (CheckBox)sender; 
     //Label myLabel; 
     String str = null; 
     if (c.Checked == true) 
     { 
      str = c.Text; 
      gpBox[gpcount] = new GroupBox(); 
      gpBox[gpcount].Name = "gpBox" + Convert.ToString(count); 
      gpBox[gpcount].Text = str; 
      gpBox[gpcount].Location = new Point(5, gpposition); 
      gpBox[gpcount].AutoSize = true; 
      this.Controls.Add(gpBox[gpcount]); 

      aCommand3 = new OleDbCommand("select * from batch_tbl where batch_branch LIKE '" + str + "'", main_connection); 
      aAdapter3 = new OleDbDataAdapter(aCommand3); 
      ds3 = new DataSet(); 
      aAdapter3.Fill(ds3, "app_info"); 
      ds3.Tables[0].Constraints.Add("pk_bno", ds3.Tables[0].Columns[0], true); 
      int batch_count = ds3.Tables[0].Rows.Count; 
      //filling the groupbox with batch code by generating dynamic checkboxes 
      for (int i = 0; i < batch_count; ++i) 
      { 
       checkBox[i] = new CheckBox(); 
       checkBox[i].Name = "check" + Convert.ToString(i); 
       checkBox[i].Text = ds3.Tables[0].Rows[i][1].ToString(); 
       Console.WriteLine(checkBox[i].Text); 
       checkBox[i].Location = new System.Drawing.Point(104 * position, 30); 
       gpBox[gpcount].Controls.Add(checkBox[i]); 
       position++; 
       count++; 
      } 
      position = 1; 
      gpposition += 100; 
     } 
     else 
     { 
      count--; 
      this.Controls.RemoveByKey("lbl" + c.Name); 
      this.Update(); 
     } 
    } 
관련 문제