Announcement

Collapse
No announcement yet.

DataTable mit inhalten einer XML Datei füllen und begrenzen

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

  • DataTable mit inhalten einer XML Datei füllen und begrenzen

    Hallo,

    Ich hab ne frage und zwar erstelle ich eine Datatable aus einer XML file und übergebe diese als DataSource an ein GridView. Ich möchte jetzt aber das zum beispiel nur 20 Rowsa von 100 angezeigt werden wie mach ich das am besten. Wichtig das aussortieren muss vor dem binden mit dem Gridview passieren.

    Kann mir da jemand helfen ich steh total auf dem Schlauch!!!!

  • #2
    Über eine DataView oder eine BindingSource oder via LINQ oder irgendeine andere Methode.

    Warum packst du das XML in eine DataTable? Es gibt da auch andere eventuell geeignetere Methoden wie zum Beispiel LINQ to XML. Liegt das XML bereits in einem DataTable Schema vor oder benutzt du noch ein älteres Framework?

    Comment


    • #3
      Alo ich nutze das .Net Framework 4.0

      Ich muss die Daten des XML in eine Gridview laden.
      Wenn ich das XML mit LINQ abfrage zb. Select myRow Take 5. Bekomm ich ja die 5 ersten Sätze. Wenn ich diese dann in die XML zurückschreib updatet er dann die XML File oder löscht er alles und schreibt die 5 Sätze rein?

      Comment


      • #4
        Wenn ich diese dann in die XML zurückschreib updatet er dann die XML File oder löscht er alles und schreibt die 5 Sätze rein?
        Ohne es ausprobiert zu haben. Wenn du die gefilterte Menge änderst solltest du die anschließend wieder mit dem Original XML joinen(auch per LINQ) und das dann wegschreiben.

        Comment


        • #5
          Mein Code sieht jetzt so aus:

          Dim myXml = XDocument.Load(My.Settings.Path)
          Dim ConnectionLog = myXml...<ConnectionLog>.Take(5)

          Ergebnis:

          <ConnectionLog>
          <ID>2</ID>
          <Profil>Test</Profil>
          <DatumBeginn>2012-06-08T00:00:00+02:00</DatumBeginn>
          <UhrBeginn>2012-06-08T15:34:12.1877699+02:00</UhrBeginn>
          <DatumEnde>2012-06-08T00:00:00+02:00</DatumEnde>
          <UhrEnde>2012-06-08T16:16:48.1875477+02:00</UhrEnde>
          <Dauer>00:42:35</Dauer>
          <Grund>Test</Grund>
          </ConnectionLog>

          Da bekomm ich die 5 ersten Elemente der XML raus aber jetzt hab ich ja nix davon ich muss die ja noch in die GridView bringen

          Comment


          • #6
            Das Ergebnis von Take(5) einfach ans Grid binden?

            Comment


            • #7
              Ne das geht net. habs jetzt so gelöst:

              Dim doc = XDocument.Load(My.Settings.Path)
              Dim log = doc...<ConnectionLog>.Take(My.Settings.Dataset)

              For Each oNode In log
              Dim oRow = _oDataLogTable.NewRow()
              Dim i As Integer = 0

              For Each Element As Xml.Linq.XElement In oNode.Elements
              oRow(i) = Element.Value()
              i += 1
              Next
              _oDataLogTable.Rows.Add(oRow)
              Next



              Das funktioniert auch super.
              Hier mal die Update Methode könntest du da mal bitte drüber schaun ob das passt, weil aus irgend einem Grund speichert er die Änderungen net.

              Code:

              Dim doc = XDocument.Load(My.Settings.Path)

              For Each oRow As DataRow In _oDataLogTable.Rows
              Dim sId As String = CStr(oRow("ID"))
              Dim elem = _
              <ConnectionLog
              <%= From oElement In doc...<ConnectionLog> Where oElement.<ID>.Value = sId %>
              ID=<%= oRow("ID") %>
              Profil=<%= oRow("Profil") %>
              DatumBeginn=<%= oRow("DatumBeginn") %>
              UhrBeginn=<%= oRow("ID") %>
              DatumEnde=<%= oRow("DatumEnde") %>
              UhrEnde=<%= oRow("UhrEnde") %>
              Dauer=<%= oRow("Dauer") %>
              Grund=<%= oRow("Grund") %>>
              </ConnectionLog>
              Next

              Comment


              • #8
                Ne das geht net.
                Ich bin mir ziemlich sicher das ein simples

                Code:
                dataGridView.DataSource = meinXDocument.Elements("meinElementName").Take(meineGewünschteElementAnzahl).ToList();
                funktioniert.

                Comment


                • #9
                  Gut Danke
                  Jetzt fehlt nur noch des Update

                  Comment


                  • #10
                    Ich habs danke für die hilfe
                    LINQX FTW

                    Comment


                    • #11
                      Ich hätte da noch ne kleine anschluss Frage und zwar Ich muss zum schluss wenn ich meine DataTable zurückschreibe schauen ob die Row aus der DataTable geändert, gelöscht oder hinzugefügt wurde. Ich dachte ich geh dann meine DataTable durch und schau nach dem Status der Row sprich modified, delete und added aber meine rows haben alle den Status added. Obwohl doch das Gridview die DataSource auch mit aktuallisiert?

                      Comment


                      • #12
                        Doch DataTable?

                        Wenn du die Daten manuell in die DataTable rüberkopiert hast (also z.B. mit dem Aufruf von NewRow) dann gelten die alle als neue Rows(Added). Die kammen ja nicht per SQL aus einer DB die als Referenzobjekt für den Bearbeitungszustand gilt. Wenn du jetzt nochmals bearbeitest bleiben die natürlich auch auf Added. In SQL gesprochen, es muß ein INSERT bleiben. Durch bearbeiten kann da kein UPDATE draus werden den Datensatz gibt es ja nicht in der DB. Und beim löschen darf da auch kein DELETE draus werden sondern es muss einfach die ROW lokal im Speicher gelöscht werden. Wenn dich nur der Bearbeitungszustand nach dem rüberkopieren interressiert solltest du erst einmal AcceptChanges aufrufen um die RowStates zurückzusetzen.

                        Comment

                        Working...
                        X