Nu ved jeg ikke så meget om dyreavl og stamtavler for sådanne, men din egen idé lyder da nærliggende. Hvilken orden er det du vil have dem ud i? Skal søskende komme i en bestemt rækkefølge og hvordan holder man styr på dem i det virkelige liv...?
Et bud på en datamodel for stamtavle kunne være (feltnavnene skal naturligvis gøre mere teknisk kompatible :-)):
dyr =
id
+ parentid
+ navn
+ født dato
+ whatever!!
Så kan du i det mindste trække dem ud efter datoorden og få søskende listet i kronologisk orden.
Hvis du så også skal vide hvem der er parret med hvem, skal du nok bruge en tabel mere som danner relation mellem dyr.
avl =
id
+ handyrid
+ hundyrid
+ dato
hvor handyrid og hundyrid peger på de respektive dyr som er avlet. Jeg mener denne relationstabel er nødvendig, da hvert dyr velsagtens kan parres med flere andre dyr...
I virkeligheden burde der vel være to parentid (morid og farid) i dyr-tabellen, da man vel gerne vil kende begge forældrene for et givet dyr... i så fald kunne man måske helt undlade avl-tabellen, da afkommet så afspejler, hvem der er avlet for at komme til dette dyr...? Altså bare én tabel:
dyr =
id
+ handyrid
+ hundyrid
+ navn
+ født dato
+ whatever!!
Den sidste kommentar havde jeg også tænkt, men hvordan finder jeg så søskende til denne??
søskende er dem med samme far og mor (halvsøskende hvis kun en af dem er den samme)
SELECT d2.*
FROM dyr d1,dyr d2
WHERE d1.id=X AND d1.handyrid=d2.handyrid AND d1.hundyrid=d2.hundyrid
finder søskende til X.
Hvis det er muligt så bør du overveje at lave meget af logikken i applikationen
fremfor i SQL. OOP er langt bedre end SQL til træstrukturer.
Jeg har fundet følgende som sådan set virker..
Jeg skal så bare have det til at ligne en stamtavle og ikke et treeview.. Hvordan gøres det?
Imports System.Data.SqlClient
Imports System.IO
Imports System.Data
Partial Class _Default
Inherits System.Web.UI.Page
Dim constr As String = System.Configuration.ConfigurationManager.ConnectionStrings("CON").ToString()
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
PopulateTree()
End Sub
Public Sub PopulateTree()
Dim con As New SqlConnection(constr)
Dim cmd As New SqlCommand()
cmd.CommandText = "Select * from Tree"
cmd.Connection = con
Dim dtMenu As New DataTable()
Dim da As New SqlDataAdapter(cmd)
da.Fill(dtMenu)
Dim dv As New DataView(dtMenu)
dv.RowFilter = "ParentID=0"
Dim i As Integer
TreeView_Control.Nodes.Clear()
For i = 0 To dv.Count - 1
Dim node As New TreeNode()
node.Value = dv(i)("ID").ToString()
node.Text = dv(i)("Name").ToString()
TreeView_Control.Nodes.Add(node)
RecFillTree(dtMenu, node)
Next
End Sub
Public Sub RecFillTree(ByVal dtMenu As DataTable, ByVal ParentNode As TreeNode)
Dim dv As New DataView(dtMenu)
dv.RowFilter = "ParentID =" & ParentNode.Value
Dim i As Integer
If (dv.Count > 0) Then
For i = 0 To dv.Count - 1
Dim node As New TreeNode()
node.Value = dv(i)("ID").ToString()
node.Text = dv(i)("Name").ToString()
ParentNode.ChildNodes.Add(node)
RecFillTree(dtMenu, node)
Next
End If
End Sub
Protected Sub TreeView_Control_SelectedNodeChanged1(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView_Control.SelectedNodeChanged
LblTreeNode_Text.Text = TreeView_Control.SelectedNode.Text
LblTreeNode_Value.Text = TreeView_Control.SelectedNode.Value
End Sub
End Class