DataExpression: Geschachtelter Child-Verweis möglich?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von us4711.

    DataExpression: Geschachtelter Child-Verweis möglich?

    Hallo Forum,

    ich möchte in einem Datagridview Informationen aus einer Basistabelle, und gleichzeitig Werte aus einer relational verbundenen Tabelle darstellen, und zwar lediglich Werte des Datensatzes mit dem höchsten Datum. Geht über Dataexpressions und Max- Funktion zufriedenstellend:

    Quellcode

    1. Max(Child(FK_Mitglieder_MitgliederGraduierungen).Datum)


    Ich möchte aber weitere Werte aus dem über die Max-Funktion gefundenen Datensatz darstellen, nämlich die aus Tabellen, die über weitere Relationen mit dem über die Max-Funktion gefundenen Datensatz verbunden sind.

    Und da habe ich keinen Plan .... Ich stelle mir das so vor, das ich mit der Max-Funktion einen Verweis auf einen Datensatz bekomme, den ich dann mit weiteren Child-Relations auswerten kann?

    Ein Auszug aus dem Dataset ist angefügt.
    Für jeden Tipp wäre ich dankbar.
    Bilder
    • DataExpressionTest.JPG

      81,69 kB, 908×537, 108 mal angesehen
    jo, ich glaub, da hörts dann so langsam auf mitte DataExpressions. Die Max-Funktion liefert dir keinen Datensatz, sondern nur eine Zahl.

    Ah - ich hab neulich was komisches ausprobiert: OwnerDrawing oder CellFormatting.

    Also ich hab ungebundene Spalten ans DGV drangemacht, und im CellPainting hab ich einfach vom aktuellen Datensatz aus über verknüpfte annere DS mir den Kram geholt, den ich anzeigen wollte, und ihn in die Zelle gemalt.
    Selbiges geht auch im CellFormatting-Event - also bei was sich als Text anzeigen lässt ists sogar einfacher als OwnerDrawing.
    Schöner Tipp, werd' ich gleich mal ausprobieren. Danke.
    //EDIT:
    @ErfinderDesRades
    Schöne Lösung. Bin allerdings darauf reingefallen, das ich versuhte, im Event aus DataPropertyName auf die Bindingsource-Row zu schliessen.
    Dabei aht die ungebundene Column garnicht gestört, aber natürlich wir die Bindingsource.Current nicht verändert bei der Anzeige der Zeilen.
    War aber doch leicht zu lösen.
    Und ... es gibt bei der Anzeige keine merkliche Vrzögerung, obwohl da doch ziemlich viel Daten bewegt werden. Oder ist das nur Pointer-Arithemtik?
    Jedenfalls vielen Dank, Problem gelöst:

    VB.NET-Quellcode

    1. Private Sub MitgliederDataGridViewEx_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles MitgliederDataGridViewEx.CellFormatting
    2. If DirectCast(sender, DataGridView).Columns(e.ColumnIndex).Name = Me.dgvcolGraduierung.Name Then
    3. Dim rowMitglied = Me.JudoManagementDataSet.Mitglieder.FirstOrDefault(Function(m) m.IDVerein = Me.VereinBindingSource.At(Of VereinRow).ID AndAlso m.ID = CInt(DirectCast(sender, DataGridView).Rows(e.RowIndex).Cells(dgvcolId.Name).Value))
    4. Dim rowMitgliederGraduierung = rowMitglied.GetMitgliederGraduierungenRows.LastOrDefault
    5. If Not rowMitgliederGraduierung Is Nothing Then
    6. Try
    7. Dim sb = New StringBuilder
    8. sb.Append(rowMitgliederGraduierung.GraduierungenGradeRow.Bezeichnung)
    9. sb.Append(String.Format(" ({0})", rowMitgliederGraduierung.GraduierungenStreifenRow.Bezeichnung))
    10. e.Value = sb.ToString
    11. e.FormattingApplied = True
    12. Catch ex As Exception
    13. ' Nur solange, bis ich der Lösung wirklich vertraue ;-)
    14. Stop
    15. End Try
    16. End If
    17. End If
    18. End Sub


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „us4711“ ()