2012-06-12 58 views
1

請提供任何有用的鏈接。如何根據下拉值動態創建VB.NET控件

我需要創建VB.NET樣品的問題類型的web表單,其允許用戶執行以下操作:

  1. 用戶從下拉菜單中(文本框,單選按鈕,列表框等)的控件類型。
  2. 根據Webform上的控件類型動態生成控件。
  3. 它將始終顯示TextBox(用戶在哪裏寫問題)和(生成的控件 - TextBox,RadioButton,ListBox等)並將這些值保存到數據庫。

  4. 在Web窗體上顯示生成的示例問題。

謝謝。

+0

這是什麼意思:_「用戶寫問題,並將生成的問題保存到數據庫。」_?當你知道的是用戶需要ListBox時,如何填充ListBox等控件? –

+0

我想你會看到兩個不同的UI來構建。第一個將創建一個UI,使您可以創建和管理問題和可能的答案。第二個是如何獲取存儲的數據並呈現出用戶交互的表單來回答問題。 –

回答

0

像這樣的東西應該工作(沒有數據庫交互;))。

ASPX:

<asp:DropDownList runat="server" id="TypeDropDown" OnSelectedIndexChanged="OnTypeChanged"> 
    <asp:ListItem>TextBox</asp:ListItem> 
    <asp:ListItem>RadioButton</asp:ListItem> 
</asp:DropDownList> 
<asp:Panel> 
    Question: <asp:TextBox runat="server" ID="Question" /> <br /> 
    Answer: <asp:PlaceHolder runat="server" ID="Place" /> 
</asp:Panel> 

後臺代碼:

protected override void OnInit(EventArgs eventArgs) { 
    base.OnInit(eventArgs); 
    CreateDynamicControl(); 
} 

private void CreateDynamicControl() { 
    Place.Controls.Clear(); 
    Place.Controls.Add(ControlFactory.Create(TypeDropDown.SelectedValue); 
} 

private void OnTypeChanged(object sender, EventArgs eventArgs) { 
    CreateDynamicControl(); 
} 

控制工廠:

static class ControlFactory { 
    public static Control Create(string type) { 
    if ("TextBox".Equals(type)) 
     return new TextBox(); 

    if ("RadioButton".Equals(type)) 
     return new RadioButtonList(); 
    } 
} 
0

我認爲你正在尋找的是一個數據庫管理系統解決方案,您在保存DB是控件的類型,而不是顯示正在查看類型的頁面並使用佔位符來生成內容的時間 你需要。 這是一個鏈接到維基百科解釋DBMS:http://en.wikipedia.org/wiki/Database_management_system

0

我做了類似於這個使用聲明語法,使用DataBinding。

對不起,代碼是這麼長,但只發布沒有嵌套中繼器的相關部分可能沒有意義。我發佈完整的嵌套中繼器代碼的上下文。

在我的設置,這是一個調查程序,以問題小組(外中繼器),由一個或多個問題(嵌套的中繼器)。

這是如何工作的相關部分是代碼示例中的嵌套中繼器。我在標記中提供了所有的控件。但每個的.Visible屬性都是基於QuestionType設置的。

<asp:Repeater ID="Repeater1" runat="server"> 
     <ItemTemplate> 
      <div class="questiongroup"> 
       <asp:HiddenField runat="server" ID="lblQuestionGroupId" Value='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "QuestionGroupId").ToString()) %>'> 
       </asp:HiddenField> 
       <asp:HiddenField runat="server" ID="hfSortOrder" Value='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "SortOrder").ToString()) %>'> 
       </asp:HiddenField> 
       <asp:HiddenField runat="server" ID="hdnPointsAwarded" Value='0'></asp:HiddenField> 
       <br /> 
       <h3><asp:Label runat="server" ID="txtQuestionGroupName" MaxLength="50" Columns="50" Text='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "QuestionGroupName").ToString()) %>'></asp:Label> 
       </h3> 
       Score Section 
       <asp:CheckBox runat="server" ID="chkIsScoreSection" Enabled="false" TabIndex="-1" 
        Checked='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "IsScoreSection")) %>' /> 
       Minimum required correct answers: 
       <asp:Label runat="server" ID="lblMinimumForScore" MaxLength="3" Columns="3" Text='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "CommentsRequiredMinimumYesAnswers").ToString()) %>'></asp:Label> 
        Point Value <asp:Label ID="lblPossiblePoints" runat="server" Text='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "PossiblePoints").ToString()) %>' /> 
          <br /> 
       Group Instructions 
       <br /> 
       <asp:Label runat="server" ID="lblGroupInstructions" TextMode="MultiLine" Columns="50" Rows="3" 
        Text='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "GroupInstructions").ToString()) %>'></asp:Label> 
       <br /> 
       <div class='questionseditor'> 
       </div> 
       <br /> 
       <div class="questionsdiv"> 
        <asp:Repeater ID="childRepeater" runat="server" DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("Relation2") %>'> 
         <ItemTemplate> 
         <div class="question"> 
          <asp:HiddenField ID="hdnQuestionType" runat="server" Value='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) %>' /> 
          <asp:HiddenField ID="hdnQuestionId" runat="server" Value='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionId\"]").ToString()) %>' /> 
          <asp:HiddenField ID="hfQuestionSortOrder" runat="server" Value='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"SortOrder\"]").ToString()) %>' /> 
          <asp:RequiredFieldValidator SetFocusOnError="True" ID="YesNoForScoreRequiredFieldValidator" runat="server" 
           ControlToValidate="lstYesNoForScore" Display="Dynamic" ErrorMessage="Required<br />" 
           Enabled='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "1" %>'></asp:RequiredFieldValidator> 
          <asp:RequiredFieldValidator SetFocusOnError="True" ID="MemoRequiredFieldValidator" runat="server" ControlToValidate="txtMemoAnswer" 
           Display="Dynamic" ErrorMessage="Required<br />" 
           Enabled='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "2" %>'></asp:RequiredFieldValidator> 
          <asp:RequiredFieldValidator SetFocusOnError="True" ID="NumericAnswerRequiredFieldValidator" runat="server" 
           ControlToValidate="txtNumericAnswer" Display="Dynamic" ErrorMessage="Required<br />" 
           Enabled='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "3" %>'></asp:RequiredFieldValidator> 
          <asp:RegularExpressionValidator SetFocusOnError="True" Display="Dynamic" runat="server" ID="NumericTextRegexValidator" 
           ValidationExpression="^\d*[0-9](|.\d*[0-9]|,\d*[0-9])?$" Enabled='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "3" %>' 
           ErrorMessage="*Invalid<br />" ControlToValidate="txtNumericAnswer"></asp:RegularExpressionValidator> 
          <asp:RequiredFieldValidator SetFocusOnError="True" ID="RequiredFieldValidator1" runat="server" ControlToValidate="lstYesNoNonScored" 
           Display="Dynamic" ErrorMessage="Required<br />" Enabled='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "5" %>'></asp:RequiredFieldValidator> 
          <asp:Label ID="lblQuestionText" runat="Server" Text='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionText\"]").ToString()) %>'></asp:Label><br /> 
          <asp:RadioButtonList runat="server" ID="lstYesNoForScore" RepeatDirection="Horizontal" 
           Visible='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "1" %>'> 
           <asp:ListItem Text="Yes" Value="1"></asp:ListItem> 
           <asp:ListItem Text="No *" Value="0"></asp:ListItem> 
          </asp:RadioButtonList> 
          <asp:TextBox ID="txtMemoAnswer" runat="server" Visible='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "2" %>' 
           TextMode="MultiLine" Rows="3" Width="100%"></asp:TextBox> 
          <asp:TextBox ID="txtNumericAnswer" runat="server" Visible='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "3" %>' 
           cols="5"></asp:TextBox> 
          <uc1:MultipleChoiceControl ID="MultipleChoiceControl1" runat="server" Visible='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "4" %>' 
           QuestionId='<%# Convert.ToInt32(DataBinder.Eval(Container.DataItem, "[\"QuestionId\"]")) %>' /> 
          <asp:RadioButtonList runat="server" ID="lstYesNoNonScored" RepeatDirection="Horizontal" 
           Visible='<%# Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment( DataBinder.Eval(Container.DataItem, "[\"QuestionTypeId\"]").ToString()) == "5" %>'> 
           <asp:ListItem Text="Yes" Value="1"></asp:ListItem> 
           <asp:ListItem Text="No" Value="0"></asp:ListItem> 
          </asp:RadioButtonList> 
          <br /> 
          </div> 
         </ItemTemplate> 
        </asp:Repeater> 
       </div> 
       Comments for this Question Group (Required if score not awarded) 
       <asp:TextBox ID="txtGroupComments" runat="server" TextMode="MultiLine" Rows="3" Width="100%"></asp:TextBox> 
      </div> 
     </ItemTemplate> 
    </asp:Repeater> 
相關問題