0

私は新しいASP.NET開発者であり、システム管理者がクイズを作成できるようにする簡単なクイズエンジンを開発しようとしています。クイズのタイトルと説明を挿入するためのListViewを作成しましたが、質問と回答などのクイズ自体の内容については、大きな問題があります。各クイズには異なる数の質問があるため。また、質問は4つの回答を持つ多肢選択式の質問である可能性があり、True of Falseの質問である可能性があるため、各質問の回答数は異なります。では、これらすべての要件に対応するための最良の理由は何でしょうか。何か案が?また、例またはコードスニペットを教えていただけますか?

参考までに、私は次のデータベース設計を持っています。

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

私のASP.NETコード:

<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" Width="20px" runat="server" CommandName="Update" />

                            <asp:ImageButton ID="CancelButton" ImageUrl="Images/icons/cancel324.png" Width="20px" 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/create 2 48.png" Width="20px" runat="server" CommandName="Insert" />

                            <asp:ImageButton ID="CancelButton" ImageUrl="images/clear3.png" Width="20px" 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" Width="20px" runat="server" CommandName="Delete" />

                            <asp:ImageButton ID="EditButton" ImageUrl="Images/icons/edit224.png" Width="20px" runat="server" CommandName="Edit" />

                            <asp:ImageButton ID="SelectButton" ImageUrl="images/select.png" Width="20px" 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/delete24.png" Width="20px" runat="server" CommandName="Delete" />

                            <asp:ImageButton ID="EditButton" ImageUrl="images/edit224.png" Width="20px" 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>

アップデート:

クイズエンジンをできるだけダイナミックにしようとしています。質問ごとに可能な回答の数が異なるため、最初に回答の数をユーザーに入力してもらい、テキストボックスを作成します。私はすでにコードを書きましたが、うまくいきませんでした。エラーはありませんが、私のために作成されたTextBoxはありません。それで、それをどのように行うのですか?

私のASP.NETコード(パネルを作成しましたが、使用したことはありません):

<div>
        <asp:Label ID="lblText" runat="server" Text="How many answers?" />
        <asp:TextBox ID="NumOfTextBoxes" runat="server"></asp:TextBox>
        <asp:Button ID="insertAnswerTextBox" runat="server" Text="Enter" OnClick="insertAnswerTextBox_OnClick" />

        <asp:Panel ID="AnswersForm" runat="server" Visible="false">
            <asp:TextBox ID="AnswerTextBox" runat="server"></asp:TextBox>
        </asp:Panel>
    </div>

コードビハインド:

protected void insertAnswerTextBox_OnClick(object sender, EventArgs e)
    {
        PlaceHolder PlaceHolder1 = new PlaceHolder();
        // Get the number of textbox to create.
        int number = System.Convert.ToInt32(NumOfTextBoxes.Text);
        for (int i = 1; i <= number; i++)
        {
            TextBox AnswerTextBox = new TextBox();

            // Set the label's Text and ID properties.
            AnswerTextBox.Text = "AnswerTxtBox" + i.ToString();
            AnswerTextBox.ID = "AnswerTxtBox" + i.ToString();
            PlaceHolder1.Controls.Add(AnswerTextBox);
            // Add a spacer in the form of an HTML <br /> element.
            PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
        }
    }
4

1 に答える 1

1

追加するのを忘れたものを除いて、コードは正しいです。すべてのテキストボックスをプレースホルダーコントロールに追加しましたが、Webフォームにプレースホルダーを追加していません。次の行をに追加しますinsertAnswerTextBox_OnClick

  form1.Controls.Add(PlaceHolder1); 

完全なコードは次のようになります

protected void insertAnswerTextBox_OnClick(object sender, EventArgs e)
{
    PlaceHolder PlaceHolder1 = new PlaceHolder();
    // Get the number of textbox to create.
    int number = System.Convert.ToInt32(NumOfTextBoxes.Text);
    for (int i = 1; i <= number; i++)
    {
        TextBox AnswerTextBox = new TextBox();

        // Set the label's Text and ID properties.
        AnswerTextBox.Text = "AnswerTxtBox" + i.ToString();
        AnswerTextBox.ID = "AnswerTxtBox" + i.ToString();
        PlaceHolder1.Controls.Add(AnswerTextBox);
        // Add a spacer in the form of an HTML <br /> element.
        PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
    }
    form1.Controls.Add(PlaceHolder1); 
}
于 2012-07-17T12:27:40.097 に答える