2013-05-13 34 views
3

動態分組框中我想動態地創建分組框中這些GB將在複選框上的選擇創建。如何創建C#

意味着我有5個複選框,如果我現在選擇第1塊CB然後1 GB與其他一些動態複選框,應建立,如果我選擇第3檢查然後又GB應符合幾個其他複選框被創建。 爲了這個,我這個代碼whee我能創造這已經是在設計時創建的固定組合框中動態複選框嘗試。

我的情況是 - 5個分行有多個批次。現在用戶將從動態複選框中選擇分支,並在此基礎上,每個分支將在分組框中顯示分組。 分支1店2店3 Branch4 Branch5如果用戶選擇第三和第五分公司然後GB1將展示店3的批次和GB2應當出示Branch5的批次 這裏是代碼 -

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

這段代碼很不錯,但我不知道有多少Branch CB將使用select,那麼在設計時如何爲每個選定分支放置GB,因爲他需要在運行時選擇Branch CheckBoxes來生成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(); 
     } 
    }