ASP.NET Zone

Die ASP.NET Community. Alle Antworten rund um Microsoft® Webtechnologien
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe | Impressum | ASP.NET Zone Suchplugin

in
Home Blogs Foren FAQ Communities Fotos Downloads
Werbeanzeige

Daten gruppiert anzeigen in GridView

Letzter Beitrag 09-19-2012, 16:46 von -nin. 13 Antworten.
Beiträge sortieren: Zurück Weiter
  •  01-07-2008, 10:39 189539

    Daten gruppiert anzeigen in GridView

    Hallo,

    ich lese Daten aus einer Datenbank aus und zeige diese in einem GridView an.

     

    Die Tabelle sieht dann z.B. so aus:

    spalte 1 | spalte 2 |
    ---------------------------------
    wert1 | 12367 |
    wert1 | 54822 |
    wert2 | 89832 |
    wert2 | 95448 |
    wert2 | 51487 |

    Jetzt möchte ich das ganze graphisch gruppieren. Was ich damit meine ist, das ich zwischen wert 1 und wert 2 eine Leerzeile oder sowas haben möchte, also das man erkennt das dies andere Gruppen sind:

    spalte 1 | spalte 2 |
    ---------------------------------
    wert1 | 12367 |
    wert1 | 54822 |

    wert2 | 89832 |
    wert2 | 95448 |
    wert2 | 51487 |

    Wie bekomme ich das am einfachsten hin?

  •  01-07-2008, 12:27 189546 Antwort zu 189539

    AW: Daten gruppiert anzeigen in GridView

    Hi,
    zerberos:

    ich lese Daten aus einer Datenbank aus und zeige diese in einem GridView an.

    Jetzt möchte ich das ganze graphisch gruppieren. Was ich damit meine ist, das ich zwischen wert 1 und wert 2 eine Leerzeile oder sowas haben möchte, also das man erkennt das dies andere Gruppen sind:


    das einfachste dürfte sein, du nimmst einen Repeater, gibst diesem deine Werte als Spalte 1 (bspw. über SELECT DISTINCT <spaltenname> FROM tabelle) mit und innerhalb des Repeaters fügst Du ein Gridview ein, dass dir die Daten zum jeweiligen Wert ausgibt.
    Man kann zwar auch eine Zeile ins Gridview einfügen aber obige Variante ist IMO sinnvoller.


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
  •  01-08-2008, 10:16 189613 Antwort zu 189546

    AW: Daten gruppiert anzeigen in GridView

    Ok. Werde das mal mit dem Repeater versuchen. brauch dabei aber noch nen bischen Hilfe

     

    So hab ich den eingebaut:

    <asp:Repeater ID="Repeater1" runat="server">

    <ItemTemplate>

    <asp:GridView ID="GridView1" runat="server">

    </asp:GridView>

    </ItemTemplate>

    </asp:Repeater>

     

    Jetzt hab ich die Daten der Spalte 1 verucht an den Repeater zu binden und zwar so:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim constring As String = "User ID=test1;password=test1; Data Source=test1"

    Dim con As OracleConnection = New OracleConnection(constring)

    Dim commandstring As String = "Select splate 1 from tabelle1"

    Dim daadapter As OracleDataAdapter = New OracleDataAdapter(commandstring, con)

    Dim dt As DataTable = New DataTable

    daadapter.Fill(dt)

    Repeater1.DataSource = dt

    Repeater1.DataBind()

     

    End Sub

     

    Ist das so richtig?

     

    Bis jetzt habe ich mein GridView immer so gefüllt. Nur ich weiß nicht wie ich das jetzt machen muss?

    Dim commandstring As String = "Select spalte1,spalte2,spalte3,spalte4 from tabelle1'"

    Dim daadapter As OracleDataAdapter = New OracleDataAdapter(commandstring, con)

    Dim dt2 As DataTable = New DataTable

    daadapter.Fill(dt2)

    GridView1.DataSource = dt2

    GridView1.DataBind()

  •  01-08-2008, 10:42 189615 Antwort zu 189613

    AW: Daten gruppiert anzeigen in GridView

    Hallo zusammen

    Hmm, deine Lösung ist gut, wenn man die Daten in meheren GridViews getrennt halten möchte Stefan.

    Ein anderer Weg ist bspw. über den Event RowDataBound.
    Dort überprüft man in jeder Zeile ob der Wert mit dem vorherigen noch übereinstimmt, ansonsten kann eine leere Zeile eingefügt werden.


    --
    Gruss Peter
    Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
    peterbucher.ch - Meine Persönliche Seite
    Dependency Injection Container
    .NET XML Repository

    ASP.NET Zone - Leitfaden für gute Postings
  •  01-08-2008, 11:05 189620 Antwort zu 189615

    AW: Daten gruppiert anzeigen in GridView

    Peter Bucher:

    Ein anderer Weg ist bspw. über den Event RowDataBound.
    Dort überprüft man in jeder Zeile ob der Wert mit dem vorherigen noch übereinstimmt, ansonsten kann eine leere Zeile eingefügt werden.


    Beispiel bitte (und nicht in KIMAS reinschauen^^)


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
  •  01-08-2008, 11:10 189621 Antwort zu 189620

    AW: Daten gruppiert anzeigen in GridView

    Salute

    Stefan Falz:

    Beispiel bitte (und nicht in KIMAS reinschauen^^)


    So ähnlich:

    Oder noch besser:

    <Insider>Nö, ich doch nicht^^</Insider>


    --
    Gruss Peter
    Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
    peterbucher.ch - Meine Persönliche Seite
    Dependency Injection Container
    .NET XML Repository

    ASP.NET Zone - Leitfaden für gute Postings
  •  01-08-2008, 12:11 189628 Antwort zu 189621

    AW: Daten gruppiert anzeigen in GridView

    ok. das mit dem gridviewhelper ist nichts für mich da ich da ja was externes einbinden muss. Ne leere Zeile inzufügen nachdem sich der wert in spalte 1 geändert hat würde mir reichen

    Hab mal versucht dein anderes beispiel anzupassen. Bin aber irgendwie gescheitert. Ich poste mal meinen quelltext und es wäre nett wenn mir jemand sagen könnte wo der fehler ist bzw wo ich ansetzen muss

    Dim awert As String

    Dim lzeile As Boolean

    Dim cell As TableCell = New TableCell()

    If e.Row.RowType = DataControlRowType.DataRow Then

    awert = e.Row.Cells(0).Text

    If awert = letzterwert Then

    letzterwert = awert

    Else

    lzeile = True

    End If

    Else

    lzeile = False

    End If

    If lzeile = True Then

    cell.Text = String.Empty

    e.Row.Cells.AddAt(0, cell)

    End If

  •  01-08-2008, 13:35 189634 Antwort zu 189628

    AW: Daten gruppiert anzeigen in GridView

    Hallo zerberos

    Fehlerbeschreibung?
    Externes einbinden ist doch kein Problem, vorallem wenn es sich nur um Helper Klassen handelt.

    Was ist "letzerwert" bzw. wo ist es deklariert?
    Dein restlicher Code ist leicht unsinnig, es reicht eine einfache Abfrage.
    If a = b Then
        ... einfügen :-)


    --
    Gruss Peter
    Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
    peterbucher.ch - Meine Persönliche Seite
    Dependency Injection Container
    .NET XML Repository

    ASP.NET Zone - Leitfaden für gute Postings
  •  01-08-2008, 13:53 189637 Antwort zu 189634

    AW: Daten gruppiert anzeigen in GridView

    Hier ist das deklariert!

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

    Ja das der code der da steht zuv iel ist weiß ich auch. Mein Problem ist gerade eher wie ich dem sage das der neue neue Zeile einfügt im GridView

     Nur mal so von der logig.

     

    Zuerst muss ich ja den Wert der spalte0 in der aktuellen row speichern

    awert = e.Row.Cells(0).Text

    Dann Prüfen ob der gleich dem Letzen wert ist und wenn der gleich ist nicht macht und wenn der ungleich ist eine zeile einfügen

     

    PS: Ich möchte mich an dieser Stelle mal für dieses tolle Forum bedanken und den Leuten hier die auch mal dumme Fragen beantworten bzw anfängerfragen. Eine großes Dankeschön an euch alle!

  •  01-08-2008, 14:20 189641 Antwort zu 189637

    AW: Daten gruppiert anzeigen in GridView

    Hallo zerberos

    Du musst den letzten Wert ausserhalb des RowDataBound Eventhandlers deklarieren, ansonsten wird er bei jedem Durchlauf wieder leer.

    RowDataBound wird für ein GridView für jede Zeile einmal aufgerufen.


    --
    Gruss Peter
    Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
    peterbucher.ch - Meine Persönliche Seite
    Dependency Injection Container
    .NET XML Repository

    ASP.NET Zone - Leitfaden für gute Postings
  •  01-09-2008, 8:54 189685 Antwort zu 189641

    AW: Daten gruppiert anzeigen in GridView

    jo, hab ich ausserhalb deklariert:

    Private letzterwert As String

    Hatte ich nur vergessen mitzuposten

    Mein Problem ist eher das ich momentan nicht weiß wie der Befehl ist um eine leere Zeile einzufügen?

     

     

  •  01-10-2008, 10:17 189720 Antwort zu 189685

    AW: Daten gruppiert anzeigen in GridView

    Hallo zusammen,

    ich habe mich entschloßen direkt in der DataTable zu überprüfen und dort leere Zeilen einzufügen, da ich die dataTable auch noch für andere Sachen benötige und dort auch die llerzeilen brauche. Dann muss ich das nur an einer stelle ändern

     

    Habe Codemässig schonmal was. Das ist von der Logik noch nicht richtig. Wollte nur erstmal testen neue zeilen einzufügen. Und bin da schon auf ein Problem gestoßen

    Das ist mein Code:

     

    Dim neuezeile As DataRow = dt.NewRow()

    Dim ersterwert As String

    Dim zweiterwert As String

     

    For Each row As DataRow In dt.Rows

    zweiterwert = row(0)

    If ersterwert = zweiterwert Then

    Else

    dt.Rows.Add(neuezeile)

    End If

    Next row

     

    Bekomme jetzt wenn der eine neue Zeile eingefügt hat folgende Fehlermeldung wenn der in die nächte Zile im DataRow gehen will:

    Die Auflistung wurde geändert; möglicherweise wurde die Enumeration nicht ausgeführt

    Was muss ich jetzt machen?

    Danke!!!

     

     

     

     

  •  01-10-2008, 13:31 189735 Antwort zu 189720

    AW: Daten gruppiert anzeigen in GridView

    Hallo zerberos

    Ich füge in meinem Beispiel jeweils eine Zelle ein.
    Wenn du eine Zeile einfügen möchtest, geht das - wie du schon gemerkt hast - nicht im RowDataBound Ereignis.

    Das Problem dabei ist, das du während dem Eventhandleraufruf durch die Rows Collection iterierst, dabei darf die Auflistung (also die Rows) nicht geändert werden.

    Eine Lösung hast du ja schon mit den oben genannten Helper Klassen.


    --
    Gruss Peter
    Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
    peterbucher.ch - Meine Persönliche Seite
    Dependency Injection Container
    .NET XML Repository

    ASP.NET Zone - Leitfaden für gute Postings
  •  09-19-2012, 16:46 224648 Antwort zu 189735

    AW: Daten gruppiert anzeigen in GridView

    Hallo, ich bitte um Entschuldigung,

    wenn ich diesen alten Thread hier aufwärme, aber ich stehe grade vor einem ähnlichen Problem.
    Ich habe ein GridView, das mir Benutzer aus einer BeispielDB darstellt.

    Die Benutzer sind jeweils in Abteilungen unterteilt.

    Meier, A210, Verwaltung
    Müller, A215, Verwaltung
    Hanses, A200, QS
    Geiger, A400, Gießerei
    Franke, B300, Gießerei
    Herz, A900, Gießerei

    Ich möchte mein Grid nun so gruppieren:

    Gießerei (colspan = 2)
    Geiger, A400
    Franke, B300
    Herz, A900
    QS
    Hanses, A200
    Verwaltung
    Meier, A210
    Müller, A215

    Das Prizip, wie das mit dem Gruppieren funktioniert, sortieren nach Abteilung, dann nach Name und mittels Variable vergleichen, wann sich der Zellwert der Abteilung ändert verstehe ich, aber an der Umsetzung hapert's bei mir. Wenn man doch innerhalb des RowDataBound den Wert von bspw. e.Row.Cells(2).Text in eine Variable letzterWert schreibt, dann kann der Wert doch nie unterschiedlich zur Variable AktWert sein. Denn den AktWert müsste ich doch außerhalb von RowDataBound füllen.

    Oder verstehe ich etwas nicht richtig?

    Danke für die ersten Ansätze, mit denen Ihr mir schon etwas geholfen habt.

    -nin

     


    ASP Classic - Erfahrener Programmierer
    ASP.net - Oje, blutiger Anfänger
Als RSS Feed in XML ansehen
Powered by Community Server (Commercial Edition)