如何开发这个依赖于另一个ListView的ListView?

我是一名新的ASP.NET开发人员,我正在尝试开发一个简单的测验引擎,允许系统管理员使用两个ListView创建测验。 第一个ListView用于插入测验标题和描述,第二个ListView用于插入问题,答案(答案数量不同),正确答案,答案解释,问题顺序。

我有以下数据库设计:

Quiz Table: QuizID, Title, Description Question Table: QuestionID, Question, QuestionOrder, AnswerExplanation QuestionImage Table: ID, QuestionID, URL Answer Table: AnswerID, Answer QuizContent Table: ID, QuizID, QuestionID, AnswerID 

我的要求让我对第二个ListView与数据的绑定感到困惑:

  1. 每个测验都有不同数量的问题,每个问题都有不同数量的可能答案。 例如,在其中一个测验中,我有两个问题。 在第一个问题中,我有四个可能的答案,第二个问题是真或假的问题。
  2. 一些问题可能有一些图像。

此ListView应支持CRUDE操作。 那怎么做?

我的第一个ListView的ASP.NET代码:

         <asp:TextBox ID="TitleTextBox" runat="server" Text='' />   <asp:TextBox ID="DescriptionTextBox" runat="server" Text='' />     
No data was returned.
<%--  --%> <asp:TextBox ID="TitleTextBox" runat="server" Text='' /> <asp:TextBox ID="DescriptionTextBox" runat="server" Text='' /> <%----%> <%-- <asp:Label ID="QuizIDLabel" runat="server" Text='' /> --%> <asp:Label ID="TitleLabel" runat="server" Text='' /> <asp:Label ID="DescriptionLabel" runat="server" Text='' />
... Title Description
<%-- <asp:Label ID="QuizIDLabel" runat="server" Text='' /> --%> <asp:Label ID="TitleLabel" runat="server" Text='' /> <asp:Label ID="DescriptionLabel" runat="server" Text='' /> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="" SelectCommand="SELECT * FROM [Quiz]" DeleteCommand="DELETE FROM [Quiz] WHERE [QuizID] = @QuizID" InsertCommand="INSERT INTO [Quiz] ([Title], [Description]) VALUES (@Title, @Description)" UpdateCommand="UPDATE [Quiz] SET [Title] = @Title, [Description] = @Description WHERE [QuizID] = @QuizID">

我的第二个ListView的代码:

 
<%-- <asp:Label ID="QuestionIDLabel1" runat="server" Text='' /> --%> <asp:TextBox ID="QuestionTextBox" runat="server" Text='' CssClass="textbox" /> <asp:TextBox ID="Answer1TextBox" runat="server" Text='' CssClass="textbox" /> <asp:TextBox ID="CorrectAnswerTextBox" runat="server" Text='' CssClass="textbox" /> <asp:TextBox ID="AnswerExplanationTextBox" runat="server" Text='' CssClass="textbox" /> <asp:TextBox ID="QuestionOrderTextBox" runat="server" Text='' CssClass="textbox" />
No data was returned.
<%--  --%> <asp:TextBox ID="QuestionTextBox" runat="server" Text='' CssClass="textbox" /> <asp:TextBox ID="AnswerTextBox" runat="server" Text='' CssClass="textbox" /> <asp:TextBox ID="CorrectAnswerTextBox" runat="server" Text='' CssClass="textbox"/> <asp:TextBox ID="AnswerExplanationTextBox" runat="server" Text='' CssClass="textbox" /> <asp:TextBox ID="QuestionOrderTextBox" runat="server" Text='' CssClass="textbox" /> Please enter the letter of the correct answer A, B, C, D. <asp:Label ID="QuestionLabel" runat="server" Text='' /> <asp:Label ID="Answer1Label" runat="server" Text='' /> <asp:Label ID="CorrectAnswerLabel" runat="server" Text='' /> <asp:Label ID="AnswerExplanationLabel" runat="server" Text='' /> <asp:Label ID="QuestionOrderLabel" runat="server" Text='' />
... Question Answer Correct Answer Answer Explanation Question Order Image
<%----%> <%----%> <asp:Label ID="QuestionLabel" runat="server" Text='' /> <asp:Label ID="Answer1Label" runat="server" Text='' /> <asp:Label ID="CorrectAnswerLabel" runat="server" Text='' /> <asp:Label ID="AnswerExplanationLabel" runat="server" Text='' /> <asp:Label ID="QuestionOrderLabel" runat="server" Text='' />
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="" SelectCommand="SELECT dbo.Question.Question, dbo.Question.QuestionOrder, dbo.Question.AnswerExplanation, dbo.Answers.Answer, dbo.QuestionImage.URL FROM dbo.Question INNER JOIN dbo.QuizContent ON dbo.Question.QuestionID = dbo.QuizContent.QuestionID INNER JOIN dbo.Answers ON dbo.QuizContent.AnswerID = dbo.Answers.AnswerID INNER JOIN dbo.Quiz ON dbo.QuizContent.QuizID = dbo.Quiz.QuizID LEFT OUTER JOIN dbo.QuestionImage ON dbo.Question.QuestionID = dbo.QuestionImage.QuestionID WHERE (dbo.QuizContent.QuizID = @QuizID)">

我现在的问题在于如何让管理员能够按照自己的意愿输入不同数量的答案。 有人可以帮我吗?

我一直在考虑这个和原型设计,我认为通过修改设计会更好。 可能最好是模拟工作流并将其传播到多个页面上,而不是尝试在两个listView中执行一页。 在第一页上使用您的第一个listView,它在Quiz(zes)表上实现您想要的CRUD操作。 对其进行编码,以便在选择特定测验时,通过将QuizID作为URL中的参数传递,将工作推进到新页面 – 示例:

的Response.Redirect( “Questions.aspx quiz_id = 1024?”);

或作为会话变量 – 示例:

Session [“quiz_id”] = 1024; 的Response.Redirect( “Questions.aspx”);

此时,您在工作流程的后期才需要这样做,因为您不在问题或答案表中使用QuizID,但它稍后会派上用场。 使用与测验相同的方式对listView编码进行编码,然后前进到答案并重复。

在管理员提出问题和答案之后,将他们引导到集成页面(或页面),现在您可以最终使用您一直携带的QuizID。 或者您可以提供一个小的列表框来选择测验,每个listBoxItem的文本是标题和/或描述,值是QuizID。

无论哪种方式,此时您都可以为问题和答案添加列表框以获取可用内容,并在列表框旁边添加所选内容。 添加左右箭头按钮可以为两组方框来回移动选项。

此时,向页面和click事件添加一个保存按钮,在QuizContents表上执行插入,使用QuizID变量,以及来自所选问答列表框的QuestionID和AnswerID。 如果在这些列表框中的任何一个中允许多选模式,则必须循环此操作。

最后,有一个确认页面,他们可以通过QuizID进行搜索,并一目了然地查看所有相关的问题和答案。