我想要这样一个功能,在网上书店中,用DataList列出同一类图书的信息。
书的记录在Books表中,按分类的类型号(typeid)可以查询出图书的其他信息,但书的作者和书之间是一个多对多的关系,所以这个关系用一个表(BookAuthor)列出,就象Duwamish7中的数据库一样。
别的信息都没有问题,但书的作者没有办法在这个DataList中列出。
我想了两种方法:
第一:在DataList中使用用户控件,在用户控件中根据图书的ID号(主键)找出书的所有信息,由于是对一本书,所以可以找出图书的所有作者,并显示在用户控件中;而在DataList中则对用户控件指定其图书的ID,这样DataList就能够把所有的图书的信息列出了。但我不知道如何在DataList中使用用户控件,并能使用户控件得到不同的图书的ID号。
第二:自己通过一个复杂的处理,先把所有图书的其他信息获得,放在一个表中,再对表中的所有行进行处理,得到每一行的作者的信息,再把原表中的信息和对应的作者信息合并到一个表或视图中,最后把视图中的数据用DataList显示出来。第二种方法可以实现,但是太复杂了,性能应该会有影响。
请问大家有没有好办法,谢谢。

解决方案 »

  1.   

    请看清再说。
    我是要求双重重复,
    第一重是通过DataList列出所有的图书信息,
    第二重是在第一重的DataList的每一项中,再重复把这一本图中的所有作者信息列出来,而一本书有多个作者,一个作者可以有多本著作,所以作者和图书之间的关系通过一个表记录。
      

  2.   

    不明白要在DataList里使用什么用户控件?说说
      

  3.   

    比如说:网上书店的应用,我要在一个页面中列出各类图书的信息,图书显示时,分类进行显示,第一类要写出类别名称,并把此类中的最近出版的5本书列在这一类类别名称的下方,同一页中把数据库中的所有图书都列出,显示的结果就象下面的一样    程序开发语言(这是类别名称)              数据库(这是另一个类别名称)
          C语言                                   数据库原理
          C++ Primer                              SQL SERVER 2000程序设计
          C#程序设计语言                          DB2入门
         ...                                        ...
        网络与通信(这是第三个类别名称)          
          TCP/IP详解(第一卷)
          TCP/IP详解(第二卷)
          TCP/IP详解(第三卷)类别的数量也不定,要根据数据库中类别的记录确定,数据库中有“分类”表和“图书”表,图书属于某一类别。请问这样的效果如何实现?
    如果不怕麻烦和效率,可以实现,做两次查询,然后把两次查询的结果合成到一个DataTable之类的对象中,再把这个对象绑定到DataList中。但这样的方法没有通用性,而且实现麻烦,效率也不能保证。
    谢谢。
      

  4.   

    随手写,可能有些小错误,以前做过,没有楼主想得那么复杂,其实很简单的.
    private DataView dv;
    private DataSet ds=new DataSet();在Page _Load:da=new SqlDataAdapter(SQL1,cn);
    da.fill(ds,"categories");da.SelectCommand = new SqlCommand(SQL2,cn);
    da.Fill(ds,"products");dv = ds.Tables[0].DefaultView;this.DL1.DataSource= ds.Tables[0];
    this.DL1.DataBind();--------------------------------------------建立一个可公共访问Method用于绑定 :
    public DataView GetProducts(int catID)
     {
      dv.RowFilter = "catID=" + catID;
      return dv;
    }
     HTML代码 :<asp:DataList id="DL1" ..................>
    <ItemTemplate>
    <%#DataBinder.Eval(Container.DataItem,"categoryName")%>
    <asp:DataGrid runat="server" DataSource='<%#GetProducts((int)DataBinder.Eval(Container.DataItem,"categoryName")%>' /></ItemTemplate>
    </asp:DataList>