2011-12-05 13 views
0

私は、ダイナミックコントロールを作成しています私は、オプションでドロップダウンを持っている「テキストボックス、チェックボックス、ドロップダウン、ラベル」ユーザーは設計上の問題

レッツが作成されるコントロールのドロップダウンから、これらのオプションのいずれかを選択私はドロップダウンからオプションを選択することから、これらのようなコントロールを作成すると言います。ページ出力におけるしかし

1: text box 
2: drop down 
3: text box: 
4: dropdown 

その次のように示す:

1: textbox 
2: textbox 
3: dropdown 
4: dropdown 

これは、上で選択した順序に基づいて、正しい順序ではありません。

ここのデザインはかなり正しくはありません。私は自分の型にaccoringコントロール作り直すコントロール再作成していた場合

:テキストボックス、そしてドロップダウン

PLSがattchedコードに、これは参考になる解決するためにどのように任意の提案を見つけます。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Dynamiccontrol.aspx.cs" Inherits="Dynamic_controls.Dynamiccontrol" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:DropDownList ID="ddlcontrols" runat="server" AutoPostBack="True" 
      onselectedindexchanged="ddlDynamic_SelectedIndexChanged"> 
      <asp:ListItem>--Select--</asp:ListItem> 
      <asp:ListItem>Textbox</asp:ListItem> 
      <asp:ListItem>Dropdown</asp:ListItem> 
     </asp:DropDownList> 
    </div> 
    </form> 
</body> 
</html> 

In.csコード

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace Dynamic_controls 
{ 
    public partial class Dynamiccontrol : System.Web.UI.Page 
    { 
     Panel pnlTextBox; 
     protected void Page_PreInit(object sender, EventArgs e) 
     { 
      //Create a Dynamic Panel 
      pnlTextBox = new Panel(); 
      pnlTextBox.ID = "pnlTextBox"; 
      pnlTextBox.BorderWidth = 1; 
      pnlTextBox.Width = 800; 
      pnlTextBox.Height = 800; 
      this.form1.Controls.Add(pnlTextBox); 

      RecreateTxtControls("txtDynamic", "TextBox"); 
      RecreateDDLControls("ddlDynamic", "DropDownList"); 
      RecreateChkControls("chkDynamic", "CheckBox"); 

     } 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     private int FindOccurence(string substr) 
     { 
      string reqstr = Request.Form.ToString(); 
      return ((reqstr.Length - reqstr.Replace(substr, "").Length)/substr.Length); 
     } 

    private int FindOccurenceCheckbox(string substr) 
    { 
     string reqstr = Request.Form.ToString(); 
     substr = "chkDynamic"; 
     return ((reqstr.Length - reqstr.Replace(substr, "").Length)/substr.Length); 
    } 

    private int FindOccurenceLabel(string substr) 
    { 
     string reqstr = Request.Form.ToString(); 
     substr = "lblDynamic"; 
     return ((reqstr.Length - reqstr.Replace(substr, "").Length)/substr.Length); 
    } 


    private void RecreateTxtControls(string ctrlPrefix, string ctrlType) 
    { 
     string[] ctrls = Request.Form.ToString().Split('&'); 
     int cnt = FindOccurence(ctrlPrefix); 
     if (cnt > 0) 
     { 
      for (int k = 1; k <= cnt; k++) 
      { 
       for (int i = 0; i < ctrls.Length; i++) 
       { 
        if (ctrls[i].Contains(ctrlPrefix + "-" + k.ToString()) && !ctrls[i].Contains("EVENTTARGET")) 
        { 
         string ctrlID = ctrls[i].Split('=')[0]; 

         if (ctrlType == "TextBox") 
         { 
          CreateTextBox(ctrlID); 
         } 

         break; 
        } 

       } 

      } 
     } 
    } 

    private void RecreateDDLControls(string ctrlPrefix, string ctrlType) 
    { 
     string[] ctrls = Request.Form.ToString().Split('&'); 
     int cnt = FindOccurence(ctrlPrefix); 
     if (cnt > 0) 
     { 
      for (int k = 1; k <= cnt; k++) 
      { 
       for (int i = 0; i < ctrls.Length; i++) 
       { 
        if (ctrls[i].Contains(ctrlPrefix + "-" + k.ToString()) && !ctrls[i].Contains("EVENTTARGET")) 
        { 
         string ctrlID = ctrls[i].Split('=')[0]; 

         if (ctrlType == "DropDownList") 
         { 
          CreateDropDownList(ctrlID); 
         } 
         break; 
        } 
       } 
      } 
     } 
    } 

    private void RecreateChkControls(string ctrlPrefix, string ctrlType) 
    { 
     string[] ctrls = Request.Form.ToString().Split('&'); 
     // ctrlPrefix = "chkDynamic"; 
     int cnt = FindOccurenceCheckbox(ctrlPrefix); 
     if (cnt > 0) 
     { 
      for (int k = 1; k <= cnt; k++) 
      { 
       for (int i = 0; i < ctrls.Length; i++) 
       { 
        if (ctrls[i].Contains(ctrlPrefix + "-" + k.ToString()) && !ctrls[i].Contains("EVENTTARGET")) 
        { 
         string ctrlID = ctrls[i].Split('=')[0]; 

         if (ctrlType == "CheckBox") 
         { 
          CreateCheckbox(ctrlID); 
         } 
         break; 
        } 
       } 
      } 
     } 
    } 

    private void ReqFieldValidator(string ctrlPrefix, string ctrlType) 
    { 
     string[] ctrls = Request.Form.ToString().Split('&'); 
     // ctrlPrefix = "chkDynamic"; 
     int cnt = FindOccurenceCheckbox(ctrlPrefix); 
     if (cnt > 0) 
     { 
      for (int k = 1; k <= cnt; k++) 
      { 
       for (int i = 0; i < ctrls.Length; i++) 
       { 
        if (ctrls[i].Contains(ctrlPrefix + "-" + k.ToString()) && !ctrls[i].Contains("EVENTTARGET")) 
        { 
         string ctrlID = ctrls[i].Split('=')[0]; 

         if (ctrlType == "RequiredFieldValidator") 
         { 
          CreateCheckbox(ctrlID); 
         } 
         break; 
        } 
       } 
      } 
     } 
    } 

    private void ReqLabel(string ctrlPrefix, string ctrlType) 
    { 
     string[] ctrls = Request.Form.ToString().Split('&'); 
     int cnt = FindOccurenceCheckbox(ctrlPrefix); 
     if (cnt > 0) 
     { 
      for (int k = 1; k <= cnt; k++) 
      { 
       for (int i = 0; i < ctrls.Length; i++) 
       { 
        if (ctrls[i].Contains(ctrlPrefix + "-" + k.ToString()) && !ctrls[i].Contains("EVENTTARGET")) 
        { 
         string ctrlID = ctrls[i].Split('=')[0]; 

         if (ctrlType == "Label") 
         { 
          CreateLabel(ctrlID); 
         } 
         break; 
        } 
       } 
      } 
     } 
    } 



    private void CreateLabel(string ID) 
    { 
     Label lbl = new Label(); 
     lbl.ID = ID; 
     lbl.Text = "text"; 
     pnlTextBox.Controls.Add(lbl); 
     Literal lt = new Literal(); 
     lt.Text = "<br />"; 
     pnlTextBox.Controls.Add(lt); 
    } 
    private void CreateTextBox(string ID) 
    { 
     //CreateLabel(ID); 
     TextBox txt = new TextBox(); 
     txt.ID = ID; 
     pnlTextBox.Controls.Add(txt); 
     // txt.AutoPostBack = true; 
     // txt.TextChanged += new EventHandler(OnTextChanged); 
     RequiredFieldValidator req = new RequiredFieldValidator(); 
     req.ControlToValidate = txt.ID; 
     req.EnableViewState = false; 

     pnlTextBox.Controls.Add(txt); 
     Literal lt = new Literal(); 
     lt.Text = "<br />"; 

    } 


    private void CreateCheckbox(string ID) 
    { 
     CheckBox chk = new CheckBox(); 
     chk.ID = ID; 
     chk.Checked = true; 
     chk.CheckedChanged += new EventHandler(chk_CheckedChanged); 
     chk.AutoPostBack = true; 
     chk.EnableViewState = false; 
     pnlTextBox.Controls.Add(chk); 
     Literal lt = new Literal(); 
     lt.Text = "<br />"; 
     pnlTextBox.Controls.Add(lt); 
    } 

    void chk_CheckedChanged(object sender, EventArgs e) 
    { 
     try 
     { 

     } 
     catch (Exception ex) 
     { 

     } 
    } 

    private void CreateDropDownList(string ID) 
    { 
     DropDownList ddl = new DropDownList(); 
     ddl.ID = ID; 
     ddl.Items.Add(new ListItem("--Select--", "")); 
     ddl.Items.Add(new ListItem("One", "1")); 
     ddl.Items.Add(new ListItem("Two", "2")); 
     ddl.Items.Add(new ListItem("Three", "3")); 
     // ddl.AutoPostBack = true; 
     ddl.EnableViewState = false; 
     // ddl.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged); 
     pnlTextBox.Controls.Add(ddl); 

     //int cnt2 = FindOccurence("CheckBox"); 
     //CreateCheckbox("CheckBox-" + Convert.ToString(cnt2 + 1)); 

     Literal lt = new Literal(); 
     lt.Text = "<br />"; 
     pnlTextBox.Controls.Add(lt); 
    } 

    private void CreateRequiredFieldValidator(string ID) 
    { 
     RequiredFieldValidator req = new RequiredFieldValidator(); 
     req.ID = ID; 
     // ddl.AutoPostBack = true; 
     // ddl.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged); 
     pnlTextBox.Controls.Add(req); 
     Literal lt = new Literal(); 
     lt.Text = "<br />"; 
     pnlTextBox.Controls.Add(lt); 
    } 

    protected void OnTextChanged(object sender, EventArgs e) 
    { 
     TextBox txt = (TextBox)sender; 
     string ID = txt.ID; 
     ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", "<script type = 'text/javascript'>alert('" + ID + " fired OnTextChanged event');</script>"); 
     //Place the functionality here 
    } 

    protected void ddlDynamic_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (ddlcontrols.SelectedValue == "Textbox") 
     { 
      int cnt = FindOccurence("txtDynamic"); 
      CreateTextBox("txtDynamic-" + Convert.ToString(cnt + 1)); 

      int cntChk = FindOccurenceCheckbox("CheckBoxdll"); 
      CreateCheckbox("chkDynamic-" + Convert.ToString(cntChk + 1)); 
     } 
     if (ddlcontrols.SelectedValue == "Dropdown") 
     { 
      int cnt = FindOccurence("ddlDynamic"); 
      CreateDropDownList("ddlDynamic-" + Convert.ToString(cnt + 1)); 

      int cntChk = FindOccurenceCheckbox("chkDynamic"); 
      CreateCheckbox("chkDynamic-" + Convert.ToString(cntChk + 1)); 


     } 
    } 
} 

} 

答えて

0

私はあなたの質問が何であるかわかりません。あなたのコードでは、一度に1つのタイプのすべてのコントロールが作成されているので、ページ出力に表示されると思います。

コントロールをインターリーブする場合は、タイプではなくアルゴリズムを1つずつ処理するようにアルゴリズムを変更する必要があります。

+0

論理のためにありがとう – Kumee

関連する問題