其中红色内容是题目,绿色内容是回答内容,由于数据库设计时候一定会把问题和答案分开,且一个问题多个答案选择(一对多关系),所以问题和答案 会在不同的表内且用一条语句无法实现按照此结构的顺序结构(也就是用一个DataList无法完成最终的样式). 那么我们便会用嵌套方法,既红色部分为父DataList绿色部分为子DataList互相不干扰. 前台代码: <%@ Import Namespace="System.Data" %> <asp:DataList ID="Parent" runat="server" Height="134px" Width="133px" OnInit="Parent_Init"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("QuestionContent") %>' Font-Bold="True" ForeColor="Red"></asp:Label> <asp:DataList ID="Child" runat="server" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("Myrelations") %>' ForeColor="Green"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "[\"AnswerContent\"]")%>'></asp:Label> </ItemTemplate> </asp:DataList> </ItemTemplate> </asp:DataList> 注意:代码绿色部分分别为这个项目 问题的绑定与选择答案的绑定. 代码红色部分为子DataList的数据源绑定 "Myrelations"为问题与选择答案表的关系名称(关于这个关系名称的由来下面的代码中将介绍) 后台代码: String connStr = ConfigurationManager.ConnectionStrings["ResearchProjectConnectionString"].ConnectionString; //读取WEB.CONFIG连接字符串 SqlConnection conn = new SqlConnection(connStr); SqlDataAdapter SqlDa1 = new SqlDataAdapter("select * from Question", conn); //遍历问题表 SqlDataAdapter SqlDa2 = new SqlDataAdapter("select * from Answer", conn);//遍历回答表 DataSet ds = new DataSet(); SqlDa1.Fill(ds,"Question"); SqlDa2.Fill(ds,"Answer"); ds.Relations.Add("Myrelations", ds.Tables["Question"].Columns["QuestionOrder"], ds.Tables["Answer"].Columns["QuestionOrder"]); //为两个表建立关联 Parent.DataSource = ds.Tables["Question"];//父DataList绑定源 Page.DataBind();//绑定 conn.Close(); 注意:关于关联的那