Hej, Ett dataset kan ta emot flera resultat, ex: Hej,Komma åt olika tabeller i dataset från en repeater
Vi har ett register med böcker. Jag gör GUI-lagret och har en fråga om asp:repeater.
När jag anropar metoder för att lista böcker eller för att få all information om en enskild bok får jag tillbaks ett dataset med 7 tabeller. I dom flesta av dessa är det många till många relationer.
När jag visar sidan för en enskild bok går det bra, då gör ungefär så här:
Dim objFacade As Facade_Services.fcdMaintainBook
Dim tdsBook As tdsBookComplete
objFacade = New Facade_Services.fcdMaintainBook
tdsBook = objFacade.getBookById(sAccessToken, i_iObjectID)
'För att lista alla författare
Dim tdsAuthors As tdsBookComplete.AUTHORDataTable
Dim tdrAuthors As tdsBookComplete.AUTHORRow
tdsAuthors = tdsBook.AUTHORS
For Each tdrAuthors In tdsAuthors.Rows
lblAuthor.Text = lblAuthor.Text & tdrAuthors.AUTHOR_NAME & "<br>"
Next
Liknande gör jag för de andra tabellerna också.
Men när jag har en lista på labböcker använder jag en asp:repeater förstår jag inte hur jag ska göra? Jag behöver fortfarande all information i alla tabellerna.
Så här ser repeatern ut i html-läget:
<asp:Repeater id="rptMyLabBooks" runat="server">
<ItemTemplate>
<%# getRow ( Container.DataItem ) %>
</ItemTemplate>
<HeaderTemplate>Lite html-kod...</HeaderTemplate>
</asp:Repeater>
Funktion getRow ligger i code-behind där skickar jag tillbaks en sträng som skriver ut raden färdigformaterad och att rätt saker(ikoner,länkar..osv) visas.
Så här ungerfär:
Public Function getRow(ByVal DataItem As Object) As String
Dim drvBook As DataRowView = DirectCast(DataItem, DataRowView)
Dim sRow As String
Dim iBookID As Integer = CType(drvBook("OBJECTID"), Integer)
Dim sBookName As String = CType(drvBook("NAME"), String)
Dim dStartDate As Date = FormatDateTime(drvBook("STARTDATE"), DateFormat.ShortDate)
Dim iStatus As Integer = CType(drvBook("STATUS"), Integer)
'Plus en hel del till......
sFirstRow = "<tr><td>......massahtml....</td></tr>"
Return sFirstRow
End Function
Min fråga här:
Hur kommer jag mina olika tabeller i datasetet i denna funktionen? Hur loopar jag igenom t ex mina authors?
Gick detta att förstå?
Jag känner mig helt låst här, så jag skulle uppskatta lite hjälp!!
Tackar på förhand!
/Jocke
Sv: Komma åt olika tabeller i dataset från en repeater
<code>
create procedure hej
as
set nocount on
select * from tabell1
select * from tabell2
</code>
<code>
for each dr in ds.tables(0).rows
a = dr("fältnamn")
next
for each dr in ds.tables(1).rows
b = dr("fältnamn")
next
</code>
Sen hur du implementerar detta i din facadmodell får du hitta på nåt snyggt.Sv:Komma åt olika tabeller i dataset från en repeater
Tack för svaret.
Jag löste det så här:
I funktionen getRow anropar jag funktioner, en för t ex Authors.
Public Function getRow(ByVal DataItem As Object) As String
Dim drvBook As DataRowView = DirectCast(DataItem, DataRowView)
Dim sRow As String
Dim iBookID As Integer = CType(drvBook("OBJECTID"), Integer)
Dim sBookName As String = CType(drvBook("NAME"), String)
Dim dStartDate As Date = FormatDateTime(drvBook("STARTDATE"), DateFormat.ShortDate)
Dim iStatus As Integer = CType(drvBook("STATUS"), Integer)
'Plus en hel del till......
sFirstRow = "<tr><td>" & getAuthors(iBookID) & "</td></tr>"
Return sFirstRow
End Function
Sen ser getAuthors ut så här
'tdsBook skapas längst upp på sidan av typen tdsBookComplete
Private Function getAuthors(ByVal i_iBookID As Integer) As String
Dim tdsAuthor As tdsBookComplete.AUTHORSDataTable
Dim tdrAuthor As tdsBookComplete.AUTHORSRow
Dim dvAuthor As DataView
Dim sAuthor As String
If Not tdsBook Is Nothing Then
tdsAuthor = tdsBook.AUTHORS
dvAuthor = tdsBook.Tables("AUTHORS").DefaultView
'Loop and filter on current book
For Each tdrAuthor In dvAuthor.Table.Select("IDBOOK = " & i_iBookID)
sAuthor = sAuthor & tdrAuthor.TITLE & "<br>"
Next
Else
sAuthor = ""
End If
Return sAuthor
End Function
/Jocke