我想要这样一个功能,在网上书店中,用DataList列出同一类图书的信息。
书的记录在Books表中,按分类的类型号(typeid)可以查询出图书的其他信息,但书的作者和书之间是一个多对多的关系,所以这个关系用一个表(BookAuthor)列出,就象Duwamish7中的数据库一样。
别的信息都没有问题,但书的作者没有办法在这个DataList中列出。
我想了两种方法:
第一:在DataList中使用用户控件,在用户控件中根据图书的ID号(主键)找出书的所有信息,由于是对一本书,所以可以找出图书的所有作者,并显示在用户控件中;而在DataList中则对用户控件指定其图书的ID,这样DataList就能够把所有的图书的信息列出了。但我不知道如何在DataList中使用用户控件,并能使用户控件得到不同的图书的ID号。
第二:自己通过一个复杂的处理,先把所有图书的其他信息获得,放在一个表中,再对表中的所有行进行处理,得到每一行的作者的信息,再把原表中的信息和对应的作者信息合并到一个表或视图中,最后把视图中的数据用DataList显示出来。第二种方法可以实现,但是太复杂了,性能应该会有影响。
请问大家有没有好办法,谢谢。
书的记录在Books表中,按分类的类型号(typeid)可以查询出图书的其他信息,但书的作者和书之间是一个多对多的关系,所以这个关系用一个表(BookAuthor)列出,就象Duwamish7中的数据库一样。
别的信息都没有问题,但书的作者没有办法在这个DataList中列出。
我想了两种方法:
第一:在DataList中使用用户控件,在用户控件中根据图书的ID号(主键)找出书的所有信息,由于是对一本书,所以可以找出图书的所有作者,并显示在用户控件中;而在DataList中则对用户控件指定其图书的ID,这样DataList就能够把所有的图书的信息列出了。但我不知道如何在DataList中使用用户控件,并能使用户控件得到不同的图书的ID号。
第二:自己通过一个复杂的处理,先把所有图书的其他信息获得,放在一个表中,再对表中的所有行进行处理,得到每一行的作者的信息,再把原表中的信息和对应的作者信息合并到一个表或视图中,最后把视图中的数据用DataList显示出来。第二种方法可以实现,但是太复杂了,性能应该会有影响。
请问大家有没有好办法,谢谢。
解决方案 »
- xp系统先装vs2010再装iis,无法查看xml页
- .net判断是否有某字符串
- 再问一下
- DataGrid 中绑定的数据显示下划线,如何取消,并使之在鼠标放上取得时候改变颜色。
- 谁有基于B/S实现的二叉树的例子,调试成功马上结贴
- 求一个可以选择的时间选择控件
- 在解决方案资源管理器的项目下增加的“新建文件夹”为何无法发布到web服务器上?
- 怎么在两台机器之间传递文件?
- 大家对我这样建库有没有什么建议或意见,请指正!
- Pane1加载一个用户控件时提示,指定的转换无效
- 疑问! 如果自定义控件中有一个属性是 String[] 字符串集合类型,那么我们在属性浏览窗口,给它赋值时,为什么不行??是不是自己要写类
- 如何从xml中读出分段?
我是要求双重重复,
第一重是通过DataList列出所有的图书信息,
第二重是在第一重的DataList的每一项中,再重复把这一本图中的所有作者信息列出来,而一本书有多个作者,一个作者可以有多本著作,所以作者和图书之间的关系通过一个表记录。
C语言 数据库原理
C++ Primer SQL SERVER 2000程序设计
C#程序设计语言 DB2入门
... ...
网络与通信(这是第三个类别名称)
TCP/IP详解(第一卷)
TCP/IP详解(第二卷)
TCP/IP详解(第三卷)类别的数量也不定,要根据数据库中类别的记录确定,数据库中有“分类”表和“图书”表,图书属于某一类别。请问这样的效果如何实现?
如果不怕麻烦和效率,可以实现,做两次查询,然后把两次查询的结果合成到一个DataTable之类的对象中,再把这个对象绑定到DataList中。但这样的方法没有通用性,而且实现麻烦,效率也不能保证。
谢谢。
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>