請提供任何有用的鏈接。如何根據下拉值動態創建VB.NET控件
我需要創建VB.NET樣品的問題類型的web表單,其允許用戶執行以下操作:
- 用戶從下拉菜單中(文本框,單選按鈕,列表框等)的控件類型。
- 根據Webform上的控件類型動態生成控件。
它將始終顯示TextBox(用戶在哪裏寫問題)和(生成的控件 - TextBox,RadioButton,ListBox等)並將這些值保存到數據庫。
在Web窗體上顯示生成的示例問題。
謝謝。
請提供任何有用的鏈接。如何根據下拉值動態創建VB.NET控件
我需要創建VB.NET樣品的問題類型的web表單,其允許用戶執行以下操作:
它將始終顯示TextBox(用戶在哪裏寫問題)和(生成的控件 - TextBox,RadioButton,ListBox等)並將這些值保存到數據庫。
在Web窗體上顯示生成的示例問題。
謝謝。
像這樣的東西應該工作(沒有數據庫交互;))。
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();
}
}
我認爲你正在尋找的是一個數據庫管理系統解決方案,您在保存DB是控件的類型,而不是顯示正在查看類型的頁面並使用佔位符來生成內容的時間 你需要。 這是一個鏈接到維基百科解釋DBMS:http://en.wikipedia.org/wiki/Database_management_system
我做了類似於這個使用聲明語法,使用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>
這是什麼意思:_「用戶寫問題,並將生成的問題保存到數據庫。」_?當你知道的是用戶需要ListBox時,如何填充ListBox等控件? –
我想你會看到兩個不同的UI來構建。第一個將創建一個UI,使您可以創建和管理問題和可能的答案。第二個是如何獲取存儲的數據並呈現出用戶交互的表單來回答問題。 –