0

我是一名新的 ASP.NET 开发人员,我必须创建一个测验引擎应用程序。我正在使用 ListView 在特定测验下插入问题。

我有以下数据库设计:

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

我现在想要的是让管理员能够将图像嵌入到这些问题中的任何一个。既然我在数据库中有两个不同的表,我该怎么做?如上面的设计所示,一个用于问题,一个用于图像。我有这个设计是因为不是所有的问题都会有图像。除此之外,我可能有两个或三个问题或更多具有相同图像的问题。

我知道我不应该发布太多的代码或信息,但我必须这样做才能明确:

<div align="center">
        <asp:ListView ID="ListView2" runat="server" DataSourceID="SqlDataSource2" 
            DataKeyNames="QuestionID" InsertItemPosition="LastItem" OnSelectedIndexChanged="ListView2_SelectedIndexChanged">

            <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="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>
                    <%--<td>
                         <asp:TextBox ID="UrlTextBox" runat="server" Text='<%# Bind("Url") %>' />
                     </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>
                        <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>
                    <%--<td>
                         <asp:FileUpload ID="ImageIDUploader" runat="server" size="10" />
                        </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" />
                    </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>
                    <%--<td>
                            <a href='<%# Eval("URL") %>' target="_blank">
                                <asp:Label ID="ImageURLlbl" runat="server" Text='<%# Eval("URL") %>' />
                            </a>
                        </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>
                                <th style="border-bottom:2px solid #003366; ">Image (URL)</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>
                    <%--<td>
                            <asp:Label ID="ImageURLlbl" runat="server" 
                                Text='<%# Eval("URL") %>' />
                        </td>--%>
                </tr>
            </SelectedItemTemplate>
        </asp:ListView>
        </div>

        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
            ConnectionString="<%$ ConnectionStrings:QuizSysDBConnectionString %>" 
            SelectCommand="SELECT     QuestionID, Question, QuestionOrder, AnswerExplanation
                            FROM         dbo.Question
                            WHERE     (QuestionID IN
                                                      (SELECT DISTINCT QuestionID
                                                        FROM          dbo.QuizContent
                                                        WHERE      (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" DefaultValue="0"
                    PropertyName="SelectedValue" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>

那么该怎么做呢?

4

1 回答 1

1

不要在同一个列表视图中添加图像,而是显示现有图像的选择,并选择添加另一个图像,打开一个包含所有图像列表的弹出窗口和一个上传新图像的选项。

创建一个视图以结合问题和图像:

CREATE VIEW QuestionsView AS
SELECT Question.*, QuestionImage.ID AS ImageID
FROM Question LEFT OUTER JOIN QuestionImage ON Question.QuestionID = QuestionImage.QuestionID

使用此视图为您的 ListView 选择记录。

要显示 DropDownList:

<td>
   <asp:DropDownList runat="server" DataSourceID="imagesDataSource" SelectedValue="<%# Bind("ImageID") %>" DataTextField="URL" DataValueField="ID" /> 
   <asp:SqlDataSource runat="server" ID="imagesDataSource" SelectCommand="SELECT * FROM QuestionImage" />
</td>

更改您的 ListView 数据源以使用存储过程进行更新,该过程为每个 Bind 使用获取一个参数。

添加链接以打开图像列表弹出窗口。对于弹出窗口,您可以使用此处的示例之一:http: //smashingspy.com/32-best-jquery-popup-window-dialog-box-example/

于 2012-07-25T06:40:49.170 回答