2012-07-24 74 views
1

我是一名新的ASP.NET开发人员,我必须创建一个测验引擎应用程序。我使用三个实时查看控制以显示: 1.测验信息 2.提问信息(基于所选择的测验在第一的ListView) 3.答案信息(基于所选择的问题在第二的ListView)如何在第一个ListView中选择一行后显示(可见)第二个ListView?

我有以下的数据库设计:

QuizContent Table: ID, QuizID, QuestionID, AnswerID, isCorrect 
Quiz Table: QuizID, Title, Description, isSent 
Question Table: QuestionID, Question, QuestionOrder, AnswerExplanation 
Answers Table: AnswerID, Answer 

我现在想要的是以下几点:当用户(谁是管理员)来测验引擎页面,他应该只看到第一ListView控件主要是关于测验信息。当他选择其中一个测验时,第二个ListView将显示所选测验的问题信息。当他选择其中一个问题时,第三个ListView将显示所选问题的答案信息。

那么该怎么做?

我知道我不应该张贴太多的代码或信息,但我必须这样做,要清楚:

<div align="center"> 
      <asp:ListView ID="ListView1" runat="server" DataKeyNames="QuizID" 
       DataSourceID="SqlDataSource1" InsertItemPosition="LastItem" > 

       <EditItemTemplate> 
        <tr style=""> 
         <td> 
          <asp:ImageButton ID="UpdateButton" ImageUrl="Images/icons/update24.png" ToolTip="Update" runat="server" CommandName="Update" /> 

          <asp:ImageButton ID="CancelButton" ImageUrl="Images/icons/cancel324.png" ToolTip="Cancel" runat="server" CommandName="Cancel" /> 
         </td> 
         <td> 
          <asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' /> 
         </td> 
         <td> 
          <asp:TextBox ID="DescriptionTextBox" runat="server" 
           Text='<%# Bind("Description") %>' /> 
         </td> 
        </tr> 
       </EditItemTemplate> 
       <EmptyDataTemplate> 
        <table id="Table1" runat="server" style=""> 
         <tr> 
          <td> 
           No data was returned.</td> 
         </tr> 
        </table> 
       </EmptyDataTemplate> 
       <InsertItemTemplate> 
        <tr style=""> 
         <td> 
          <asp:ImageButton ID="InsertButton" ImageUrl="Images/icons/add24.png" ToolTip="Add" runat="server" CommandName="Insert" /> 

          <asp:ImageButton ID="CancelButton" ImageUrl="Images/icons/clear24.png" ToolTip="Cancel" runat="server" CommandName="Cancel" /> 
         </td> 

         <%--<td> 
          &nbsp;</td>--%> 
         <td> 
          <asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' /> 
         </td> 
         <td> 
          <asp:TextBox ID="DescriptionTextBox" runat="server" 
           Text='<%# Bind("Description") %>' /> 
         </td> 
        </tr> 
       </InsertItemTemplate> 
       <ItemTemplate> 
        <tr style=""> 
         <td> 
          <asp:ImageButton ID="DeleteButton" ImageUrl="Images/icons/delete24.png" ToolTip="Delete" runat="server" CommandName="Delete" /> 

          <asp:ImageButton ID="EditButton" ImageUrl="Images/icons/edit24.png" ToolTip="Edit" runat="server" CommandName="Edit" /> 

          <asp:ImageButton ID="SelectButton" ImageUrl="Images/icons/select.png" ToolTip="Select" runat="server" CommandName="Select" /> 
          <%--<asp:Button ID="SelectButton" runat="server" CommandName="Select" Text="Select" />--%> 
         </td> 
         <%--<td> 
          <asp:Label ID="QuizIDLabel" runat="server" 
           Text='<%# Eval("QuizID") %>' /> 
         </td>--%> 
         <td> 
          <asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("Title") %>' /> 
         </td> 
         <td> 
          <asp:Label ID="DescriptionLabel" runat="server" 
           Text='<%# Eval("Description") %>' /> 
         </td> 
        </tr> 
       </ItemTemplate> 
       <LayoutTemplate> 
        <div ><table id="thetable" width="97%" cellpadding="0px" cellspacing="0px" style="margin:0px 0px 0px 0px; border:2px solid #003366; font-size:13px; font-weight:bold;"> 
         <thead> 
          <tr style="background-color:#C6D7B5;"> 
           <th style="border-bottom:2px solid #003366; ">...</th> 
           <th style="border-bottom:2px solid #003366; ">Title</th> 
           <th style="border-bottom:2px solid #003366; ">Description</th> 
          </tr> 
         </thead> 
         <tbody><tr id="itemPlaceholder" runat="server"></tr></tbody> 
        </table></div> 
       </LayoutTemplate> 
       <SelectedItemTemplate> 
        <tr style=""> 
         <td> 
          <asp:ImageButton ID="DeleteButton" ImageUrl="Images/icons/delete24.png" ToolTip="Delete" runat="server" CommandName="Delete" /> 

          <asp:ImageButton ID="EditButton" ImageUrl="Images/icons/edit24.png" ToolTip="Edit" runat="server" CommandName="Edit" /> 
         </td> 
         <%--<td> 
          <asp:Label ID="QuizIDLabel" runat="server" 
           Text='<%# Eval("QuizID") %>' /> 
         </td>--%> 
         <td> 
          <asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("Title") %>' /> 
         </td> 
         <td> 
          <asp:Label ID="DescriptionLabel" runat="server" 
           Text='<%# Eval("Description") %>' /> 
         </td> 
        </tr> 
       </SelectedItemTemplate> 
      </asp:ListView> 
      <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
       ConnectionString="<%$ ConnectionStrings:QuizSysDBConnectionString %>" 

       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"> 
       <DeleteParameters> 
        <asp:Parameter Name="QuizID" Type="Int32" /> 
       </DeleteParameters> 
       <InsertParameters> 
        <asp:Parameter Name="Title" Type="String" /> 
        <asp:Parameter Name="Description" Type="String" /> 
       </InsertParameters> 
       <UpdateParameters> 
        <asp:Parameter Name="Title" Type="String" /> 
        <asp:Parameter Name="Description" Type="String" /> 
        <asp:Parameter Name="QuizID" Type="Int32" /> 
       </UpdateParameters> 
      </asp:SqlDataSource> 
    </div> 

    <br /><br /> 

    <%--Second ListView that will contain the content of the quiz--%> 
    <div align="center"> 
     <asp:ListView ID="ListView2" runat="server" DataSourceID="SqlDataSource2" 
      DataKeyNames="QuestionID" InsertItemPosition="LastItem"> 

      <EditItemTemplate> 

       <tr style=""> 
        <td> 
         <asp:ImageButton ID="UpdateButton" ImageUrl="Images/icons/update24.png" ToolTip="Update" runat="server" CommandName="Update" /> 

         <asp:ImageButton ID="CancelButton" ImageUrl="Images/icons/cancel324.png" ToolTip="Cancel" runat="server" CommandName="Cancel" /> 
        </td> 
        <%--<td> 
         <asp:Label ID="QuestionIDLabel1" runat="server" 
          Text='<%# Eval("QuestionID") %>' /> 
        </td>--%> 
        <td> 
         <asp:TextBox ID="QuestionTextBox" runat="server" 
          Text='<%# Bind("Question") %>' /> 
        </td> 
        <td> 
         <asp:TextBox ID="QuestionOrderTextBox" runat="server" 
          Text='<%# Bind("QuestionOrder") %>' /> 
        </td> 
        <td> 
         <asp:TextBox ID="AnswerExplanationTextBox" runat="server" 
          Text='<%# Bind("AnswerExplanation") %>' /> 
        </td> 
       </tr> 
      </EditItemTemplate> 

      <EmptyDataTemplate> 
       <table runat="server" 
        style=""> 
        <tr> 
         <td> 
          No data was returned.</td> 
        </tr> 
       </table> 
      </EmptyDataTemplate> 

      <InsertItemTemplate> 
       <tr style=""> 
        <td> 
         <asp:ImageButton ID="InsertButton" ImageUrl="Images/icons/add24.png" ToolTip="Add" runat="server" CommandName="Insert" /> 

         <asp:ImageButton ID="CancelButton" ImageUrl="Images/icons/clear24.png" ToolTip="Cancel" runat="server" CommandName="Cancel" /> 
        </td> 
        <%--<td> 
         &nbsp;</td>--%> 
        <td> 
         <asp:TextBox ID="QuestionTextBox" runat="server" 
          Text='<%# Bind("Question") %>' /> 
        </td> 
        <td> 
         <asp:TextBox ID="QuestionOrderTextBox" runat="server" 
          Text='<%# Bind("QuestionOrder") %>'/> 
        </td> 
        <td> 
         <asp:TextBox ID="AnswerExplanationTextBox" runat="server" 
          Text='<%# Bind("AnswerExplanation") %>' /> 
        </td> 
       </tr> 

      </InsertItemTemplate> 

      <ItemTemplate> 
       <tr style=""> 
        <td> 
         <asp:ImageButton ID="DeleteButton" ImageUrl="Images/icons/delete24.png" ToolTip="delete" runat="server" CommandName="Delete" /> 

         <asp:ImageButton ID="EditButton" ImageUrl="Images/icons/edit24.png" ToolTip="Edit" runat="server" CommandName="Edit" /> 

         <asp:ImageButton ID="SelectButton" ImageUrl="Images/icons/select.png" ToolTip="Select" runat="server" CommandName="Select" /> 
          <%--<asp:Button ID="SelectButton" runat="server" CommandName="Select" Text="Select" />--%> 
        </td> 
        <td> 
         <asp:Label ID="QuestionLabel" runat="server" Text='<%# Eval("Question") %>' /> 
        </td> 
        <td> 
         <asp:Label ID="QuestionOrderLabel" runat="server" 
          Text='<%# Eval("QuestionOrder") %>' /> 
        </td> 
        <td> 
         <asp:Label ID="AnswerExplanationLabel" runat="server" 
          Text='<%# Eval("AnswerExplanation") %>' /> 
        </td> 
       </tr> 
      </ItemTemplate> 

      <LayoutTemplate> 
       <div ><table id="thetable" width="97%" cellpadding="0px" cellspacing="0px" style="margin:0px 0px 0px 0px; border:2px solid #003366; font-size:13px; font-weight:bold;"> 
         <thead> 
          <tr style="background-color:#C6D7B5;"> 
           <th style="border-bottom:2px solid #003366; ">...</th> 
           <th style="border-bottom:2px solid #003366; ">Question</th> 
           <th style="border-bottom:2px solid #003366; ">Question Order</th> 
           <th style="border-bottom:2px solid #003366; ">Answer Explanation</th> 
          </tr> 
         </thead> 
         <tbody><tr id="itemPlaceholder" runat="server"></tr></tbody> 
        </table></div>  
      </LayoutTemplate> 
      <SelectedItemTemplate> 
       <tr style=""> 
        <td> 
         <asp:ImageButton ID="DeleteButton" ImageUrl="Images/icons/delete24.png" ToolTip="Delete" runat="server" CommandName="Delete" /> 

         <asp:ImageButton ID="EditButton" ImageUrl="Images/icons/edit24.png" ToolTip="Edit" runat="server" CommandName="Edit" /> 
        </td> 
        <td> 
         <asp:Label ID="QuestionLabel" runat="server" Text='<%# Eval("Question") %>' /> 
        </td> 
        <td> 
         <asp:Label ID="QuestionOrderLabel" runat="server" 
          Text='<%# Eval("QuestionOrder") %>' /> 
        </td> 
        <td> 
         <asp:Label ID="AnswerExplanationLabel" runat="server" 
          Text='<%# Eval("AnswerExplanation") %>' /> 
        </td> 
       </tr> 
      </SelectedItemTemplate> 
     </asp:ListView> 
     </div> 

     <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
      ConnectionString="<%$ ConnectionStrings:QuizSysDBConnectionString %>" 
      SelectCommand="SELECT [Question].* FROM [Question] INNER JOIN [QuizContent] ON [QuizContent].[QuizID] = @QuizID" 

      DeleteCommand="DELETE FROM [Question] WHERE [QuestionID] = @QuestionID" 
      InsertCommand="INSERT INTO [Question] ([Question], [QuestionOrder], [AnswerExplanation]) VALUES (@Question, @QuestionOrder, @AnswerExplanation)" 


      UpdateCommand="UPDATE [Question] SET [Question] = @Question, [QuestionOrder] = @QuestionOrder, [AnswerExplanation] = @AnswerExplanation WHERE [QuestionID] = @QuestionID"> 

       <DeleteParameters> 
        <asp:Parameter Name="QuestionID" Type="Int32" /> 
       </DeleteParameters> 
       <InsertParameters> 
        <asp:Parameter Name="Question" Type="String" /> 
        <asp:Parameter Name="QuestionOrder" Type="Int32" /> 
        <asp:Parameter Name="AnswerExplanation" Type="String" /> 
        <asp:ControlParameter ControlID="ListView1" Name="QuizID" PropertyName="SelectedValue" Type="Int32" /> 
       </InsertParameters> 
       <UpdateParameters> 
        <asp:Parameter Name="Question" Type="String" /> 
        <asp:Parameter Name="QuestionOrder" Type="Int32" /> 
        <asp:Parameter Name="AnswerExplanation" Type="String" /> 
       </UpdateParameters> 

      <SelectParameters> 
       <asp:ControlParameter ControlID="ListView1" Name="QuizID" 
        PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 

     <br /><br /> 

    <%--Third ListView that will contain the content of the quiz--%> 
    <div align="center"> 
     <asp:ListView ID="ListView3" runat="server" DataSourceID="SqlDataSource3" 
      DataKeyNames="AnswerID" InsertItemPosition="LastItem"> 

      <EditItemTemplate> 

       <tr style=""> 
        <td> 
         <asp:ImageButton ID="UpdateButton" ImageUrl="Images/icons/update24.png" ToolTip="Update" runat="server" CommandName="Update" /> 

         <asp:ImageButton ID="CancelButton" ImageUrl="Images/icons/cancel324.png" ToolTip="Cancel" runat="server" CommandName="Cancel" /> 
        </td> 
        <%--<td> 
         <asp:Label ID="AnswerIDLabel1" runat="server" Text='<%# Eval("AnswerID") %>' /> 
        </td>--%> 
        <td> 
         <asp:TextBox ID="AnswerTextBox" runat="server" 
          Text='<%# Bind("Answer") %>' /> 
        </td> 
       </tr> 
      </EditItemTemplate> 

      <EmptyDataTemplate> 
       <table runat="server" 
        style=""> 
        <tr> 
         <td> 
          No data was returned.</td> 
        </tr> 
       </table> 
      </EmptyDataTemplate> 

      <InsertItemTemplate> 
       <tr style=""> 
        <td> 
         <asp:ImageButton ID="InsertButton" ImageUrl="Images/icons/add24.png" ToolTip="Add" runat="server" CommandName="Insert" /> 

         <asp:ImageButton ID="CancelButton" ImageUrl="Images/icons/clear24.png" ToolTip="Cancel" runat="server" CommandName="Cancel" /> 
        </td> 
        <%--<td> 
         &nbsp;</td>--%> 
        <td> 
         <asp:TextBox ID="AnswerTextBox" runat="server" 
          Text='<%# Bind("Answer") %>'/> 
        </td> 
       </tr> 

      </InsertItemTemplate> 

      <ItemTemplate> 
       <tr style=""> 
        <td> 
         <asp:ImageButton ID="DeleteButton" ImageUrl="Images/icons/delete24.png" ToolTip="Delete" runat="server" CommandName="Delete" /> 

         <asp:ImageButton ID="EditButton" ImageUrl="Images/icons/edit24.png" ToolTip="Edit" runat="server" CommandName="Edit" /> 
        </td> 
        <%--<td> 
         <asp:Label ID="AnswerIDLabel" runat="server" Text='<%# Eval("AnswerID") %>' /> 
        </td>--%> 
        <td> 
         <asp:Label ID="AnswerLabel" runat="server" Text='<%# Eval("Answer") %>' /> 
        </td> 
       </tr> 
      </ItemTemplate> 

      <LayoutTemplate> 
       <div ><table id="thetable" width="97%" cellpadding="0px" cellspacing="0px" style="margin:0px 0px 0px 0px; border:2px solid #003366; font-size:13px; font-weight:bold;"> 
        <thead> 
         <tr style="background-color:#C6D7B5;"> 
          <th style="border-bottom:2px solid #003366; ">...</th> 
          <th style="border-bottom:2px solid #003366; ">Answer</th> 
         </tr> 
        </thead> 
        <tbody><tr id="itemPlaceholder" runat="server"></tr></tbody> 
       </table></div> 
      </LayoutTemplate> 
      <SelectedItemTemplate> 
       <tr style=""> 
        <td> 
         <asp:ImageButton ID="DeleteButton" ImageUrl="Images/icons/delete24.png" ToolTip="Delete" runat="server" CommandName="Delete" /> 

         <asp:ImageButton ID="EditButton" ImageUrl="Images/icons/edit24.png" ToolTip="Edit" runat="server" CommandName="Edit" /> 
        </td> 
        <td> 
         <asp:Label ID="AnswerLabel" runat="server" 
          Text='<%# Eval("Answer") %>' /> 
        </td> 
       </tr> 
      </SelectedItemTemplate> 
     </asp:ListView> 
     </div> 

     <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
      ConnectionString="<%$ ConnectionStrings:QuizSysDBConnectionString %>" 
      SelectCommand="SELECT [Answers].* FROM [Answers] INNER JOIN [QuizContent] ON [QuizContent].QuestionID = @QuestionID" 

      DeleteCommand="DELETE FROM [Answers] WHERE [AnswerID] = @AnswerID" 
      InsertCommand="INSERT INTO [Answers] ([Answer]) VALUES (@Answer)" 


      UpdateCommand="UPDATE [Answers] SET [Answer] = @Answer WHERE [AnswerID] = @AnswerID"> 
       <DeleteParameters> 
        <asp:Parameter Name="AnswerID" Type="Int32" /> 
       </DeleteParameters> 
       <InsertParameters> 
        <asp:Parameter Name="Answer" Type="String" /> 
        <asp:ControlParameter ControlID="ListView2" Name="QuestionID" PropertyName="SelectedValue" Type="Int32" /> 
       </InsertParameters> 
       <UpdateParameters> 
        <asp:Parameter Name="Answer" Type="String" /> 
       </UpdateParameters> 

      <SelectParameters> 
       <asp:ControlParameter ControlID="ListView2" Name="QuestionID" 
        PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 

注: 我没有任何后台代码。再次,问题如下:当我运行代码时,我会看到三个ListView控件。它应该只显示其中的一个。并且,当用户选择其中一行时,第二个ListView将显示在第三个ListView中。

UPDATE:

我尝试以下方法,但它并没有和我一起工作:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      ListView1.SelectedIndex = -1; 
     } 
    } 
    protected void ListView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ListView2.DataBind(); 
    } 

回答

1

添加第一选择行DataKey像这样

<asp:ListView ID="ListView1" runat="server" DataKeyNames="QuizID" 
    DataSourceID="SqlDataSource1" InsertItemPosition="LastItem" DataKeyNames="ID" > 

而且使一定要得到的ID在SqlDataSource的

然后在Itemcommand试试这个:

ListViewDataItem dataItem = (ListViewDataItem)e.Item; 
int ID = Convert.toInt32(ListView1.DataKeys[dataItem.DisplayIndex].Values[0]); 

他再是你的ID现在你可以使第二列表视图可见,并且用这个ID来填补第二列表视图

希望我帮助

+0

其实,我没有得到如何使用ItemCommand来显示第二个ListView。如果你能告诉我 – 2012-07-24 08:41:33

+0

请打开网页表单并在设计视图中右击它然后在事件中(它看起来像一个照明螺栓),然后你会发现它的ItemCommand只需双击它,你会在代码隐藏 – 2012-07-24 08:52:15

+0

有ItemCommand谢谢,但我的问题是关于如何使用该ID来让第二个ListView被显示。无论如何,我会尽力得到它。 – 2012-07-24 09:00:16

0

试试这个: 首先把ID在datakey在第一列表视图 然后在item命令从datakey 获取所选行的ID,然后您可以使第二个listview可见并使用此ID填充它,并且您可以对最后一个列表视图执行相同操作

不要忘记将第二和最后一个列表视图上可见的伪所以不会看到它们,除非他在第一个列表视图

+0

感谢您的帮助,但因为我是一个新的开发者,我没有得到你的意思是什么你的段落。您能否详细说明并提供一段代码片段(如果可能的话)? – 2012-07-24 08:12:30

相关问题