PaceMedlem sedan juni 20019 024 inlägg Jag har en "frågepanel" på min webbsida och visar frågor under olika kategorier. Vilket är det smartaste sättet att visa upp datan i detta formatet:
Kategori #1
Fråga 1
Fråga 3
Fråga 4
Kategori #2
Fråga 2
Fråga 5
Kategori #3
... osv
När datan hämtas från databasen så hämtas det på detta viset:
[b]kategori | fråga[/b]
Kategori #1, fråga 1
Kategori #1, fråga 3
Kategori #1, fråga 4
Kategori #2, fråga 2
Kategori #2, fråga 5
Kateogir #3, ...
renholmMedlem sedan apr. 20012 266 inlägg Först en DataGrid eller DataList som hämtar Kategorierna sedan i den datalisten för varje kategori har du en till datalist eller datagrid som frågorna hämtas till.
PaceMedlem sedan juni 20019 024 inlägg Du har inte något kodexempel liggandes?
renholmMedlem sedan apr. 20012 266 inlägg Hum, inte just nu... Men det var inte så svårt att fixa har jag för mig. Men ungefär så här ("fri hand"):
<asp:datalist datakeyfield="id" id="dl1">
<itemtemplate>
Kategori:
</itemtemplate>
<selecteditemtemplate>
Kategori:<br>
<asp:datalist datasource='<%# getQ(dl1.DataKeys[dl1.SelectedIndex]) %>'/>
</selecteditemtemplate>
</asp:datalist>
Ungefär sådär....
PaceMedlem sedan juni 20019 024 inlägg Tack, men det blir ju flera databashämtningar beroende på antalet kategorier?!
Hittade även detta:
Displaying Two DataTables In One DataGrid
http://www.dotnetbips.com/displayarticle.aspx?id=94
renholmMedlem sedan apr. 20012 266 inlägg Mm, eller först hämtas alla kategorier och sedan när man väljer en kategori så hämtas frågorna som ska vara under kategorin. Så funkar mitt exempel men vet inte om det är det mest optimala, kanske ska försöka hämta allt på engång.
PaceMedlem sedan juni 20019 024 inlägg Jo, på så vis fungerar det ju perfekt, men när man vill visa kategorierna och dess frågor på en och samma sida så blir det så många databashämtningar som det finns kategorier.
Jag vill endast använda 1 sql-fråga som hämtar alla kategorier samt 1 sql-fråga som hämtar frågorna. Därutöver kan det vara länkar som leder till en sida som endast visar frågorna i en specifik kategori.
PaceMedlem sedan juni 20019 024 inlägg Kodexemplet i länken jag postade ovan fungerade inte för mig, men jag lyckades i alla fall hitta detta som fungerar som det ska:
Nested DataLists
http://aspnet101.com/aspnet101/aspnet/codesample.aspx?code=nest
Endast två sql-frågor.
PatrikBMedlem sedan mars 20002 836 inlägg Går ju att lösa med en repeater oxå. Kanske inte det smidigaste, men det funkar.
OBS! använder rak HTML-kod för tabeller .... man bör använda asp:table osv ..... men för visnings syfte räcker detta ;)
<%@ Page Language="VB" Debug="True" %>
<script runat="server">
Private lastCategory As String = ""
Private Sub Page_Load(sender As Object, e As EventArgs)
Dim _list as New ArrayList()
Dim N As Integer
For N = 0 TO 10
Dim I As Integer
For I = 0 TO 5
Dim _myList As New MyList()
_myList.Id = N
_myList.Category = "Category " & N.ToString()
_myList.Name = "Name " & I.ToString() & " in category: " & _myList.Category
_list.Add(_myList)
Next
Next
rpList.DataSource = _list
rpList.DataBind()
End Sub
Public Function doHide(ByVal cat As String) As Boolean
Dim blnHide As Boolean = False
If (lastCategory <> cat) Then
blnHide = True
End If
lastCategory = cat
Return blnHide
End Function
Public Class MyList
Private m_strCategory as String = ""
Private m_strName As String = ""
Public Property Category() As String
Get
Return m_strCategory
End Get
Set(ByVal Value As String)
m_strCategory = Value
End Set
End Property
Public Property Name() As String
Get
Return m_strName
End Get
Set(ByVal Value As String)
m_strName = Value
End Set
End Property
End Class
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:Repeater id="rpList" runat="server">
<ItemTemplate>
<table border="0">
<tr>
<td colspan="2" runat="server" visible="<%# doHide(CType(Container.DataItem, MyList).Category)%>"><b><%# CType(Container.DataItem, MyList).Category %></b></td>
</tr>
<tr>
<td widht="20" runat="server"> </td><td runat="server"><%# CType(Container.DataItem, MyList).Name %></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</form>
</body>
</html>
På detta sätt räcker det med en databas-hämtning :e
cya,
PatrikB