vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: peterjura
Datum: 28.01.18 18:00

Erstmals hallo zusammen, bin recht neu hier 
Mit dem Thema VB in Verbindung von .Net befasse ich mich erst seit kurzem. Wobei ich das System super finde, leider fehlt es halt noch etwas um die Materie richtig ausnutzen zu können…
Nun komme ich eben zu meiner Frage, wo ich an meine Grenzen derzeit Stoße…..
Würde gerne eine vorhandene Excel xlsx Datei in ein Gridview laden, und das dann in Html anzeigen lassen. Das habe ich schon mit der Hilfe des Internetes ganz gut geschafft 
Kann da auch zwischen den einzelnen Arbeitsblättern in der xlsx Datei wählen, also alles super!

Mein Problem ist das in der genannten Datei oft gleiche Werte (Duplikate) sind und diese dann logischer Weisse auch in HTML angezeigt werde.
Mein Wunsch wäre es eben das beim Darstellen des Gridview die Dopplungen nicht angezeigt werden würden. Das kann anhand der ersten Spalte passieren da, da immer eine IP Adresse drinsteht.

Hier mal mein Code zum einlesen ins Gridview:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        ' Definition von Pfad
        pfad = "~/App_Data/2.xlsx"
        Dim DBConnection = New OleDbConnection(
           "Provider=Microsoft.ACE.OLEDB.12.0;" &
         "Data Source=" & Server.MapPath(pfad) & ";" &
         "Extended Properties=""Excel 8.0;HDR=Yes""")
        DBConnection.Open()
        Dim SQLString As String = "SELECT * FROM [10 - Events$]" 
        Dim DBCommand = New OleDbCommand(SQLString, DBConnection)
        Dim DBReader As IDataReader = DBCommand.ExecuteReader()
        GridView1.DataSource = DBReader
        GridView1.DataBind()
        DBReader.Close()
        DBConnection.Close()
 
 
    End Sub
Wäre super wenn mir da jemand helfen könnte oder nen Ansatz geben kann wie ich da weiter machen könnte. Bestenfalls mit Beispiel

Beste Grüße
Peter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: effeff
Datum: 29.01.18 16:24

Schau Dir das hier bitte an und behalte "SELECT DISTINCT" im Hinterkopf: https://support.microsoft.com/de-de/help/316934

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: peterjura
Datum: 29.01.18 17:53

Hab es schon probieren können, die Idee war gut! Aber leider steckt der Teufel ja im Detail, liegt auch an meiner nicht ganz richtigen Formulierung.....

Problem ist das ich in der jeweiligen Zeile auch ein Zeitstempel habe, somit ist die Zeile nicht immer gleich.

Die Überprüfung muss sich immer auch die erste Spalte der jeweiligen Zeile beziehen. Nur anhand dieses Kriterium darf er reagieren.
Ist in diesem Fall eine IP Adresse.
Die Excel Datei lässt sich nicht beereinigen, da diese automtisch geeneriert wird.


Mein ziel wäre es eben das der Eintrag nur einmal im Frontend angezeigt wird.... Die Zeile nur einmal im Griedview pro IP Adresse anzeigen...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: effeff
Datum: 30.01.18 08:29

Ja, eben... Du machst das SELECT auf die erste Spalte und benutzt DISTINCT dabei...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: peterjura
Datum: 30.01.18 20:09

Dim SQLString As String = "SELECT DISTINCT * FROM [10 - Events$]"

habe ich jetzt verwendet, wie gesagt... nicht ganz oder ich checke es einfach nicht..

..... Schande über mein Haupt...


Filtert halt nicht ganz weil durch den Zeitstempel in der Zeile welche immer ja veschieden ist keine exakte Gleichheit der ganzen Zeile sich ergibt.

..... Wie kann ich Select Distinct nur auf die erste Zeile jeder Spalte anwenden?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: Manfred X
Datum: 30.01.18 23:50

Hallo!

Zunächst wäre zu klären, wie aus den Einträgen
zu jeweils einer Adresse selektiert werden soll:
- immer der Satz mit dem jüngsten oder dem ältesten Eintrag gemäß Zeitstempel
- zufällig irgendein Datensatz, der Zeitstempel spielt keine Rolle
- immer der erste oder immer der letzte Datensatz gemäß der Satzreihung in der Tabelle

Soll die Spalte, die den Zeitstempel enthält, gelesen werden?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: peterjura
Datum: 31.01.18 17:19

Hallo MafnredX, vielen Dank für deine Antwort.

Ganz kurz, es ist ganz egal! Also Ergo so wie es am einfachsten zu programmieren wäre.

Jetzt die Erklärung. Die Zeile mit der Ip Adresse in der ersten Spalte, hat mitunter ja den Zeitstempel und noch paar andere Spalten. Wie ERornummer, ERror Text, Systemname.

Das ganze Problem ist das die Datei selbst generiert wird, es werden Logs ausgewertet, leider stehet halt der Fehler manchmal 100 mal da, eben nur mit einem anderen Zeitstempel. Wichtig für mich ist nur das der Fehler einmal dasteht, da man ja schon reagieren muss.


Die Excel Datei wird eingelesen und mittels ASP.NET dann ins HTML generiert, wo verschieden Benutzer darauf Zugriff erhalten sollen.

Wäre echt super wenn mir da jemand etwas unter die Arme helfen könnte, weil derzeit hängt es nur daran....

Macht halt wenig sinn, zwecks der Übersichtlichkeit ein und denn gleichen Error 100 mal im Frontend anzuzeigen....

..... Lüft dann unter VB aspx, also VB.NET

Beitrag wurde zuletzt am 31.01.18 um 17:20:28 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: Manfred X
Datum: 31.01.18 20:21

Kannst Du eine "Select Distinct"-Abfrage durchführen
und dabei nur die Spalten-Bezeichner angeben, bei denen die
Datensätze jeweils eindeutigen Inhalt aufweisen, also
die Spalte mit dem Zeitstempel weglassen?

Allerdings:
[I]"Die Zeile mit der Ip Adresse in der ersten Spalte, hat [u]mitunter ja
den Zeitstempel und noch paar andere Spalten. Wie ERornummer, ERror Text,
Systemname."[/I]

Bedeutet das, die Sätze besitzen keinen einheitlichen Spalten-Aufbau?
Oder sind manchmal einige der Datensatz-Felder "leer"?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: peterjura
Datum: 31.01.18 20:40

.. würde ja am besten nen Screenshot posten, geht ja leide nicht....


"Kannst Du eine "Select Distinct"-Abfrage durchführen
und dabei nur die Spalten-Bezeichner angeben", wie würde denn der Befehl dafür aussehen?
Dim SQLString As String = "SELECT DISTINCT * FROM [6 - Events$A1]" ?? Klappt nicht ganz...

Problem das sich der Zeitstempel in der Mitte befindet, und ich im Vorfeld nie weis wie lang, also wie weit nach unten die Tabelle geht.


Bedeutet das, die Sätze besitzen keinen einheitlichen Spalten-Aufbau?
Oder sind manchmal einige der Datensatz-Felder "leer"? --> Aufbau ist immer der gleich wie folgt:

Network Address | Controller Name | System Name | Serial Number | Time | SeqNo | Type | Category | Code | Title

und darunter eben die Eiträge, wo es geht die Dopplungen zu vermeiden.... Kann nur anhand der ersten Spalte passieren...

... XXXX | ist dann eine zelle
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB.NET Excle Datei in Gridview einlesen OHNE Duplikate 
Autor: Manfred X
Datum: 31.01.18 21:47

Hier eine triviale Methode.

Lies den gesamten Tabelleninhalt in eine Datatable.
Wie das funktioniert (Fill-Methode) siehst Du hier:
http://www.vbarchiv.net/forum/read.php?f=24&t=15236&i=15256

Die geladenen Sätze werden jetzt Distinct gefiltert (übertragen).
Im Beispiel von der Datatable "dtOrg" in Datatable "dtDistinct".

Public Class frmSelectRows
 
 
    Dim dtOrg As New DataTable
    Dim dtDistinct As DataTable
    Dim bsDistinct As New BindingSource
 
    Dim dgv As New DataGridView With {.Parent = Me}
 
 
    Private Sub frmSelectRows_Load(sender As System.Object, _
                                e As System.EventArgs) Handles MyBase.Load
 
        'Testdaten (statt der Angaben aus Excel)
        With dtOrg.Columns
            .Add("Address", GetType(String))
            .Add("Whatever", GetType(String))
            .Add("TimeStamp", GetType(Date))
        End With
 
        Dim rndm As New Random(12345)
        Dim adr() As String = {"AAA", "BBB", "CCC", "DDD", "EEE"}
        For i As Integer = 0 To 100
            dtOrg.Rows.Add(adr(rndm.Next(adr.Length)), _
                           "y<xcxycvxcvxc", Now.AddMinutes(rndm.Next(0, 5)))
        Next i
 
        'Überttragung der Datensätze
        dtDistinct = dtOrg.Clone()
        bsDistinct.DataSource = dtDistinct
 
        For i As Integer = 0 To dtOrg.Rows.Count - 1
            bsDistinct.Filter = _
            dtDistinct.Columns(0).ColumnName & _
                 "='" & dtOrg.Rows(i).Item(0).ToString & "'"
 
            If bsDistinct.Count = 0 Then
                'Spalteninhalt in Column Address noch nicht vorhanden .... 
                dtDistinct.Rows.Add(dtOrg.Rows(i).ItemArray)
            End If
        Next i
 
        bsDistinct.Filter = ""
        'Sätze anzeigen
        dgv.DataSource = bsDistinct
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel