我有两个表:一个出版社(publisher)表,一个出版社出的书(books)表。我需要显示所有的出版社信息如下:
<img src= "出版社图.gif" pName="出版社的名字" pAddress="出版社的地址" booklist = "book1|book2|book3|book4">
pName和pAddress是publisher表中得到的,从而booklist是从books表中得到的。src,pName和pAddress好办,只和publisher表有关我可以这样写:
<asp:Repeater id="Repeater" runat="server">
<ItemTemplate>
<img src="<%#Container.Dataitem("ImgID")%>" pName="<%#Container.DataItem("name")%>" pAddress=<%#Container.DataItem("Address")%>>
</ItemTemplate>
</asp:Repeater>在后台vb.net中我可以写:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
' 从publisher表中获得数据
Dim myDA As New OleDbCommand("select * from publisher", myConn)
myConn.Open()
Dim myReader As OleDbDataReader
myReader = myDA.ExecuteReader()
Repeater.DataSource = myReader
Repeater.DataBind()
myConn.Close()
End Subbooklist我可以得到,像这样:"select bookname from book where pubname = 'qinghua'"
但是我怎么得到所有的出版社的booklist,并且把它写到那个repeater中呢?谢谢各位大虾了,明天搞不出来,我就死定了。
<img src= "出版社图.gif" pName="出版社的名字" pAddress="出版社的地址" booklist = "book1|book2|book3|book4">
pName和pAddress是publisher表中得到的,从而booklist是从books表中得到的。src,pName和pAddress好办,只和publisher表有关我可以这样写:
<asp:Repeater id="Repeater" runat="server">
<ItemTemplate>
<img src="<%#Container.Dataitem("ImgID")%>" pName="<%#Container.DataItem("name")%>" pAddress=<%#Container.DataItem("Address")%>>
</ItemTemplate>
</asp:Repeater>在后台vb.net中我可以写:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
' 从publisher表中获得数据
Dim myDA As New OleDbCommand("select * from publisher", myConn)
myConn.Open()
Dim myReader As OleDbDataReader
myReader = myDA.ExecuteReader()
Repeater.DataSource = myReader
Repeater.DataBind()
myConn.Close()
End Subbooklist我可以得到,像这样:"select bookname from book where pubname = 'qinghua'"
但是我怎么得到所有的出版社的booklist,并且把它写到那个repeater中呢?谢谢各位大虾了,明天搞不出来,我就死定了。
<%# GetBookList(Container.Dataitem("ImgID"))%>
<script runat="server">
private string GetBookList(string sId){
....
}
</script>
select ImgID,pbname,Address,dbo.getbookName(pbname) as booklist from publisher
代替你的:
Dim myDA As New OleDbCommand("select * from publisher", myConn)中的select * from publisher把复杂的过程交给数据库处理:以下为我的整个测试过程和结果:--建立测试环境
Create table publisher
(id Int,
ImgId int,
pbname Varchar(50),
Address varchar(50)
)
GO
--插入数据
Insert publisher select 1,1,'qinghua','清华大学出版社'
union all select 2,2,'shuili','水利出版社'
GOcreate table books
(
id int,
bookname varchar(50),
pbname varchar(50)
)
GOInsert books select 1,'C#入门','qinghua'
union select 2,'ASP.net入门','qinghua'
union select 3,'JSP入门','shuili'
union select 4,'PHP入门','shuili'GOCREATE FUNCTION dbo.getbookName(@pbname varchar(50))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r=''
SELECT @r=@r+'|'+bookname FROM books WHERE pbname=@pbname
set @r=right(@r,len(@r)-1)
RETURN(substring(@r,2,8000))
END --测试select ImgID,pbname,Address,dbo.getbookName(pbname) as booklist from publisher--结果
/*
ImgID pbname Address booklist
1 qinghua 清华大学出版社 C#入门|ASP.net入门
2 shuili 水利出版社 JSP入门|PHP入门*/--删除测试环境
Drop table publisher
Drop table books
Drop Function getbookName
程序中:你的程序只需将后台:
Dim myDA As New OleDbCommand("select * from publisher", myConn)
改成:
Dim myDA As New OleDbCommand("select ImgID,pbname,Address,dbo.getbookName(pbname) as booklist from publisher", myConn)前台如下:
<asp:Repeater id="Repeater" runat="server">
<ItemTemplate>
<img src="<%#Container.Dataitem("ImgID")%>" pName="<%#Container.DataItem("name")%>" pAddress=<%#Container.DataItem("Address")%> booklist ="<%#Container.DataItem("booklist")%>" >
</ItemTemplate>
</asp:Repeater>