Announcement

Collapse
No announcement yet.

Navigieren durch ein Dataset ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Navigieren durch ein Dataset ?

    Moinsen,<br>
    <br>
    ich habe folgende Situation:<br>
    <br>
    3 Tabellen:<br>
    <br>
    Tabelle_main<br>
    ---------------------<br>
    | id | bezeichnung |<br>
    ---------------------<br>
    | 1 | bla |<br>
    ---------------------<br>
    | 2 | fassel |<br>
    ---------------------<br>
    | 3 | blubber |<br>
    ---------------------<br>
    <br>
    Tabelle_sub1<br>
    -----------------------------------<br>
    | id | bezeichnung | parentid |<br>
    -----------------------------------<br>
    | 1 | sub_bla_1 | 1 |<br>
    -----------------------------------<br>
    | 2 | sub_bla_2 | 1 |<br>
    -----------------------------------<br>
    | 3 | sub_fassel_1 | 2 |<br>
    -----------------------------------<br>
    | 4 | sub_blubber_1 | 3 |<br>
    -----------------------------------<br>
    <br>
    Tabelle_sub2<br>
    -------------------------------------------------------<br>
    | id | bezeichnung | parentid | link |<br>
    -------------------------------------------------------<br>
    | 1 | go2bla1 | 1 | go2bla1.html |<br>
    -------------------------------------------------------<br>
    | 2 | go2bla2 | 1 | go2bla2.html |<br>
    -------------------------------------------------------<br>
    | 3 | go2blabla | 2 | go2blabla.html |<br>
    -------------------------------------------------------<br>
    | 4 | go2fassel | 3 | fassel.html |<br>
    -------------------------------------------------------<br>
    | 5 | blubber | 4 | blubber.html |<br>
    -------------------------------------------------------<br>
    <br>
    So nun möchte ich durch Tabelle_main durchgehen, und gegebenfalls (z.B.: falls id=3) die daten aus Tabelle_sub1 holen. Falls dann z.B.: die subid = 4 ist, möchte ich die zugehörigen daten aus Tabelle_sub2 holen.<br>
    <br>
    Bisherige Lösung:<br>
    <br>
    Drei versteckte Listboxen, durch die ich durchgehe.<br>
    <br>
    Hoffnung:<br>
    Jemand hat einen Vorschlag, wie ich per for oder while oder sonst eine schleife durch das DataSet gehen kann. <br>
    <br><br>
    Danke schonmal im Vorraus!<br>
    <br><br>
    Gruß,<br>
    <br>
    Micha<br>

  • #2
    Hallo,
    bei solchen Sachen habe ich immer eine eigene Methode geschrieben, die die Daten entsprechend aufbereitet:

    <pre>
    <b>ASP.NET Datei</b>
    &lt;aspataSet id="grid1" runat="server"&gt;
    &lt;Columns&gt;
    &lt;asp:TemplateColumn&gt;
    &lt;HeaderTemplate&gt;Ünerschrift&lt;/HeaderTemplate&gt;
    &lt;ItemTemplate&gt;
    &lt;%# <b>GetIrgendeinString(Container.DataItem)</b> %&gt;
    &lt;/ItemTemplate&gt;
    &lt;/asp:TemplateColumn&gt;
    &lt;/Columns&gt;
    &lt;/aspataSet&gt;
    </pre>

    <pre>
    <b>Codebehind-Datei</b>
    using System.Data;
    public class MeineSeite : Page {
    public string <b>GetIrgendeinString(DataRowView rv)</b> {
    DataRow row = rv.Row;
    DataRow[] subRows1 = row.GetChildRows("RelationXY");
    // tue irgendwas mit den subrows
    return String.Empty; // sollte auch ersetzt werden
    }
    }
    </pre>

    Wichtig ist nur, dass das DataSet die Tabellen mit Relationen verbindet. So kannst du über die Funktion getChildRows ganz einfach an die entsprechenden Werte kommen.

    Schönen Gruß

    Jör

    Comment


    • #3
      Moinsen,

      könntest du das mit den Relationen genauer erklären?
      Wie kann ich denn so ein Dataset auf einer Webseite anzeigen?

      Das Element aspataSet gibt es bei mir nicht...was mache ich falsch?

      Fragen über fragen...

      Gruß,

      Mich

      Comment


      • #4
        Guten Morgen,

        du hast recht, es war ein kleiner Tippfehler: gemeint war natürlich <b>&lt;aspataGrid runat="server" /&gt;</b>. Die Relations sind fast so wie in einer normalen Datenbank.

        So kannst du z.B. nachdem die Daten in das Dataset geladen wurden eine Relation zwischen zwei Tables erstellen:
        <pre>
        DataSet myData = MyDataAccess.GetSomeStuff();
        <b>myData.Relations.Add("ClientAddressRelation", DataSet.Tables[0].Columns[0], DataSet.Tables[1].Columns[0], true);</b>
        </pre>
        Der erste Parameter gibt der Relation einen Namen, damit wir später besser darauf zurückgreifen können.
        Der zweite und dritte Parameter verbindet Primäschlüssel der ersten Tabelle mit dem Fremdschlüssel der zweiten Tabelle. In deinem Beispiel wäre das Tabelle_main.id [0] und Tabelle_sub1.parentId [2].
        Der dritte Parameter erstellt einen Contraint, damit die Daten konsitent bleiben.

        Über diese Relation kann man nun vom der Parent-Tabelle die Details abfragen.
        <pre>
        DataRow parentRow = DataSet.Tables[0].Rows[0];
        DataRow[] childRows = parentRow.GetChildRows("ClientAddressRelation");
        </pre>
        Wichtig ist, dass hier mehrere Rows (oder auch gar keine) zurückkommen können. Daher das Array DataRow[].

        Aber auch den umgekehrten Weg kann man gehen:
        <pre>
        DataRow childRow = DataSet.Tables[1].Rows[0];
        DataRow parentRow = childRow.GetParentRow("ClientAddressRelation");
        </pre>

        Eine gute Hilfe ist hier sicherlich auch die Online-Hilfe. Unter den Stichworten DataRow.GetChildRows oder DataRow.GetParentRow kann man hier auch Beispiele finden.

        Schönen Gruß und schöne Ostern

        Jör

        Comment

        Working...
        X