我有两个表:一个出版社(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中呢?谢谢各位大虾了,明天搞不出来,我就死定了。

解决方案 »

  1.   

    刚才写错了,"select bookname from books where pubname = 'qinghua'"得到只是书的名字,还需要组合成字符串book1|book2|book3|book4的样子。
      

  2.   

    试试绑定到方法
    <%# GetBookList(Container.Dataitem("ImgID"))%>
    <script runat="server">
    private string GetBookList(string sId){
    ....
    }
    </script>
      

  3.   

    还需要组合成字符串book1|book2|book3|book4的样子,你只要从你的结果集里循环把数据读出来,串起来就好了呀...
      

  4.   

    以下针对SQLSERVER数据库。可以在数据库中建一自定义函数。然后在程序中用一条语句如下面写的测试:
    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
      

  5.   

    将复杂的过程交给数据库处理:
    程序中:你的程序只需将后台:
            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>