Avatar billede pcl Nybegynder
28. maj 2002 - 16:23 Der er 12 kommentarer

Nested datarelations

Nested datarelations (parent child relations)
eller list underkategori efter hovedkategori.

Jeg har et lille problem med at få vist et dataset i et datagrid eller lign.
Her er min kode. det virker fint med at udskrive data i en alm. tabel, men at få det over i en asp sever control, volder mig problemmer.


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Dim nwindConn As OleDbConnection = New
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Inetpub\wwwroot\oledb_connection\cellcode.mdb")



Dim MainCategoryDA As OleDbDataAdapter = New OleDbDataAdapter("SELECT
ID,Category FROM tblCategory", nwindConn)

Dim SubcategoryDA As OleDbDataAdapter = New OleDbDataAdapter("SELECT
ID,Subject,Description, CategoryID FROM tblSourceCode", nwindConn)

nwindConn.Open()

Dim categoriesDS As DataSet = New DataSet("Category_Relations")

MainCategoryDA.Fill(categoriesDS, "MainCategory")

SubcategoryDA.Fill(categoriesDS, "SubCategory")

nwindConn.Close()

Dim MainSubCategoryRelation As DataRelation =
categoriesDS.Relations.Add("CatRel",
categoriesDS.Tables("MainCategory").Columns("ID"),
categoriesDS.Tables("SubCategory").Columns("CategoryID"))

Dim MainCategoryRow As DataRow

Dim SubCategoryRow As DataRow

Dim strDivText As String

strDivText = "<table cellpadding=""0"" cellspacing=""0"" width=""800"" >" &
vbCrLf

For Each MainCategoryRow In categoriesDS.Tables("MainCategory").Rows

strDivText += "<tr><td><b>" & MainCategoryRow("Category") & "<b></td></tr>"
& vbCrLf

For Each SubCategoryRow In
MainCategoryRow.GetChildRows(MainSubCategoryRelation)

strDivText += "<tr><td><asp:linkbutton ID=""test"" runat=server
CommandName='" & SubCategoryRow("ID") & "'>" & SubCategoryRow("Subject") &
"</asp:linkbutton></td></tr>" & vbCrLf

Next

strDivText += "<tr><td>&nbsp;</td></tr>" & vbCrLf

Next

strDivText += "</table>" & vbCrLf

strDiv.InnerHtml = strDivText

End Sub
Avatar billede a1a1 Novice
28. maj 2002 - 17:04 #1
?

hvad er dit spm.? er det datarelations der er fucked? eller hvad er det?
Avatar billede a1a1 Novice
28. maj 2002 - 17:08 #2
parentColumn = ds.Tables("TopCats").Columns("ID")
childColumn = ds.Tables("SubCats").Columns("sk_ID")
myDataRelation = new DataRelation("parent2Child", parentColumn, childColumn)
myDataRelation.Nested = True
ds.Relations.Add(myDataRelation)

jeg har noget der ser sådan ud...
myDataRelation.Nested = True
sådan en har du ikke?

jeg bruger min til at "lave" en drowdown menu....
Avatar billede a1a1 Novice
28. maj 2002 - 17:08 #3
svar
Avatar billede pcl Nybegynder
28. maj 2002 - 19:13 #4
jeg vil gerne udskrive daterne fra de to tabeller i et datagrid eller datarepeter eller lign. istedet for i en <table>
Avatar billede pcl Nybegynder
28. maj 2002 - 19:17 #5
> a1 : hvordan ser koden til din menu ud?
kan man se den , der er muligvis noget i den der kan bruges .
Avatar billede a1a1 Novice
28. maj 2002 - 19:43 #6
jammen er det ikke bare noget med

MyRepeater.DataBind();

og så har du...
eksempel fra ms hjælp
<script language="C#" runat="server">
  void Page_Load(Object sender, EventArgs e)
  {
      //  Create a connection to the "pubs" database located
      // on the local computer.
      SqlConnection myConnection = new SqlConnection("server=nfo1;" +
        "database=pubs;uid=sa;pwd=a");
      // Connect to the SQL database using a SQL SELECT query to get
      // all the data from the "Titles" table.
      SqlDataAdapter myCommand = new SqlDataAdapter("SELECT * FROM" +
        " Titles", myConnection);
      // Create and fill a DataSet.
      DataSet ds = new DataSet();
      myCommand.Fill(ds);
      // Bind MyRepeater to the  DataSet. MyRepeater is the ID of the
      // Repeater control in the HTML section of the page.
      MyRepeater.DataSource = ds;
      MyRepeater.DataBind();
  }
</script>


<ASP:Repeater id="MyRepeater" runat="server">
      <HeaderTemplate>
        <Table width="100%" style="font: 8pt verdana">
            <tr style="background-color:DFA894">
              <th>
                  Title
              </th>
              <th>
                  Title ID
              </th>
              <th>
                  Type
              </th>
              <th>
                  Publisher ID
              </th>
              <th>
                  Price
              </th>
            </tr>
      </HeaderTemplate>

      <ItemTemplate>
            <tr style="background-color:FFECD8">
              <td>
                  <%# DataBinder.Eval(Container.DataItem, "title") %>
              </td>
              <td>
                  <%# DataBinder.Eval(Container.DataItem,"title_id") %>
              </td>
              <td>
                  <%# DataBinder.Eval(Container.DataItem, "type") %>
              </td>
              <td>
                  <%# DataBinder.Eval(Container.DataItem, "pub_id") %>
              </td>
              <td>
                  <%# DataBinder.Eval(Container.DataItem,
                    "price", "{0:c}") %>
              </td>
            </tr>
      </ItemTemplate>

      <FooterTemplate>
        </Table>
      </FooterTemplate>
  </ASP:Repeater>
Avatar billede a1a1 Novice
28. maj 2002 - 19:46 #7
upsss...

kom lige i tanke om at du skulle have "under" emnerne med
Avatar billede pcl Nybegynder
29. maj 2002 - 12:02 #8
det jeg gerne vil have er at jeg kan udskrive data fra de 2 SELECTS i et DATAGRID, DATALIST eller DATAREPETER.
Så jeg slipper for de to For Each Next loops på kode siden.  (der bare kobler data til et <div> tag).

Kan det lade sifg gøre???
Avatar billede pcl Nybegynder
29. maj 2002 - 12:03 #9
Det er jo ikke meningen at man skal have sin html kode inde i sit business object.
Avatar billede pcl Nybegynder
29. maj 2002 - 12:04 #10
Så kan jeg ligeså godt blive ved med at kode i classic ASP.
Avatar billede pcl Nybegynder
29. maj 2002 - 12:07 #11
Det skal fungere som denne classic asp kode gør.

'selects
Set objCommand = Server.CreateObject("ADODB.Command")
    objCommand.ActiveConnection = Conn
   
    'Get info from sp_GetCode
    objCommand.CommandText = "SELECT tblSourceCode.ID,tblSourceCode.Subject,tblSourceCode.Description,tblSourceCode.FileName, " & _
                            "tblSourceCode.SubmittedBy, tblSourceCode.CategoryID, " & _
                            "tblCategory.ID,tblCategory.Category,tblSourceCode.Dato "  & _
                            "FROM tblSourceCode INNER JOIN tblCategory ON tblSourceCode.CategoryID = tblCategory.ID " & _
                            "ORDER BY tblCategory.ID, tblSourceCode.Subject ASC"
    objCommand.CommandType = adCmdText
    Set RS = objCommand.Execute
   


'Loops til udskrivning

Do While Not RS.EOF
                varGruppeID  = RS(6) 'Category ID
                varGruppeNavn = RS(7) ' Category Name

<%= varGruppeNavn%>

<%    Do While RS(5) = varGruppeID And Not RS.EOF %>

<%=RS("Subject")%>

<%
                    RS.movenext
                    If RS.EOF Then Exit Do
                    Loop
                %>

<%
                Loop
                End If
                RS.close
                Set RS = Nothing
               
                %>
Avatar billede a1a1 Novice
29. maj 2002 - 14:07 #12
tjaaa du kan ikke fjerne html'en helt :)

her er min funktion (laver en select med under punkter

Public Function MakeCatSelect (ByVal pSelected As Integer, ByVal sSelected As Integer)
    Try
       
        Dim strSQL = "SELECT ID, sk_ID, iType, sHeading FROM tbl_pages WHERE bActive = 1 AND sk_ID = 0 ORDER BY sk_ID, iIndex "
       
        Dim strSQL2 = "SELECT ID, sk_ID, iType, sHeading FROM tbl_pages WHERE bActive = 1 AND sk_ID > 0 " & _
            " AND sk_ID IN (SELECT ID FROM tbl_pages WHERE bActive = 1 AND sk_ID = 0) ORDER BY sk_ID, iIndex "
       
        Dim myConnString As String = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=E:\DINDATABASE.mdb;"
        Dim myConnection As New OdbcConnection(myConnString)
        Dim myCommand = new OdbcDataAdapter(strSQL, myConnection)
        Dim myCommand2 = new OdbcDataAdapter(strSQL2, myConnection)
       
        Dim ds = new DataSet()
       
        myCommand.Fill(ds, "TopCats")
        myCommand2.Fill(ds, "SubCats")
        myConnection.Close()
       
        Dim myDataRelation As DataRelation
        Dim parentColumn As DataColumn
        Dim childColumn As DataColumn
       
        parentColumn = ds.Tables("TopCats").Columns("ID")
        childColumn = ds.Tables("SubCats").Columns("sk_ID")
        myDataRelation = new DataRelation("parent2Child", parentColumn, childColumn)
        myDataRelation.Nested = True
        ds.Relations.Add(myDataRelation)
       
        Dim pRow, cRow As DataRow
        Dim iTmpcount As Integer = 0
        Response.Write ("<table border=0 cellspacing=0 cellpadding=0>")
        Response.Write ("<form name=""sform"" method=""get"" >")
        Response.Write ("<script language=""javascript"">" & vbCrLf)
        Response.Write ("function chkSform() {" & vbCrLf)
        Response.Write ("if(document.sform.sMap.value!=''){" & vbCrLf)
            Response.Write ("sTemp = document.sform.sMap.value;" & vbCrLf)
            Response.Write ("iTemp = sTemp.indexOf('=');" & vbCrLf)
            Response.Write ("iTemp2 = sTemp.indexOf('&');" & vbCrLf)
            Response.Write ("sTemp2 = sTemp.substr(iTemp+1,( (iTemp2) - (iTemp+1) ) )" & vbCrLf)
            Response.Write ("parent.frames[1].ignMenu.SetVariable('mcSelected.showSelected', sTemp2); " & vbCrLf)
            Response.Write ("document.location.href=document.sform.sMap.value;" & vbCrLf)
        Response.Write ("}" & vbCrLf)
        Response.Write ("}" & vbCrLf)
        Response.Write ("</scr")
        Response.Write ("ipt>" & vbCrLf)
       
        Response.Write ("<tr valign=""top""><td>")
        Response.Write ("<select name=""sMap"" class=""inp"" onchange=""chkSform();"" style=""width: 150px;"">")
        Response.Write ("<option>make a choice</option>")
       
        Dim tChk As Integer   
        If sSelected = 0 Then
            tChk = pSelected
        End If
        For Each pRow In ds.Tables("TopCats").Rows
            Response.Write("<option value=""fmain.aspx?idx=" & iTmpCount & "&pID=" & pRow(0).ToString() & "&iType=" & pRow(2).ToString() & """ ")
            If tChk = pRow(0) Then
                Response.Write ("selected=""selected""")
            End If
            Response.Write (">" & pRow(3).ToString() & "</option>" & vbCrLf)
            For Each cRow In pRow.GetChildRows(myDataRelation)
                Response.Write("<option value=""fmain.aspx?idx=" & iTmpCount & "&pID=" & cRow(1).ToString() & "&sID=" & cRow(0).ToString() & "&iType=" & cRow(2).ToString() & """ ")
                If sSelected > 0 Then
                    If sSelected = cRow(0) Then
                        Response.Write ("selected=""selected""")
                    End If
                End If
                Response.Write (">&nbsp;&nbsp;&nbsp;&nbsp;" & cRow(3).ToString() & "</option>" & vbCrLf)
            Next
            iTmpCount = iTmpCount+1
        Next
        Response.Write ("</select>")
        Response.Write ("</td></tr>")
        Response.Write ("</form>")
        Response.Write ("</table>")

    Catch e as Exception
            Response.Write ("Error")
            Response.Write ("Exception: " & e.ToString())
       
    End Try
End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester