Problem mit Diagramm in Report

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Problem mit Diagramm in Report

    Hallo Forum,

    da ich im Hauptforum zu diesem Thame bislang keine Reaktionen bekommen habe, dachte ich es ist vielleicht speziell für hier anzusetzen.

    also mein Problem ist folgendes:

    ich habe ein sehr schönes Berechnungsprogramm geschrieben und lasse mir die berechneten Werte in einem Report sowohl als Tabelle las auch als Diagramm anzeigen. Dummerweise habe ich in der Kategoriegruppe für die X-Achse einen negativen Wert (-10) drin. Da die X-Achse automatisch skaliert wird, ist der Report nun der Meinung, dass -10 größer als 0,68 und kleiner als 25 ist.
    Interessanter Weise funktioniert das für die Y-Achse einwandfrei.
    Hier mal ein Beispiel:


    und wenn ich die achse skalar skalieren lasse ornet er die y-werte nicht korrekt den x-werten zu.
    hier ein beispiel:


    was läuft da schief???
    kann das was mit falscher typisierung zu tun haben? Weil Texte sortieren anders als Zahlen.

    guggemol

    VB.NET-Quellcode

    1. Dim numbStrings = "-10 -5 0 0,6 25".Split
    2. numbStrings.Sort()
    3. MessageBox.Show(String.Join(" ", numbStrings), "alphabetische Sortierung")
    gibt folgendes aus:

    Brainfuck-Quellcode

    1. ---------------------------
    2. alphabetische Sortierung
    3. ---------------------------
    4. 0 0,6 -10 25 -5
    5. ---------------------------
    6. OK
    7. ---------------------------
    die werte werden aus einem datagridview in eine datenbank geladen und dann für den report aus der datenbank wieder ausgelesen. bei dieser übergabe ist alles als string konvertiert. aber für die diagrammdaten habe ich deswegen extra nen ausdruck hinterlegt: CDbl(Fields:...)
    also müssten theoertisch jedenfalls alle Werte als Double in das Diagramm geschrieben werden.
    die werte werden aus einem datagridview in eine datenbank geladen

    Du hast eine Tabelle, die sich in einem Dataset befindet, an ein DGV gebunden und bearbeitest deine Daten im DGV und diese Daten werden in einer DB aufgehoben, oder wie machst du das wirklich...
    Da empfehle ich dir schon, die richtigen Datentypen zu verwenden, um diese Konvertiererei zu vermeiden...

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

    also ich lasse diverse berechnungen laufen und schreibe die ergebnisse der berechnungen in das dgv direkt per item-zuweisung. die dabei verwendeten variablen sind alle als double deklariert.
    wenn das dgv gefüllt ist wird es angezeigt. per button-klick werden dann diese daten aus dem dgv in eine datenbank geladen wo sie für die erstellung des report wieder abgefragt werden.
    die datenbank befülle ich mit folgendem code:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Backgroundworker2_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
    2. Dim conn As System.Data.OleDb.OleDbConnection
    3. Dim strSQL As String
    4. strSQL = "INSERT INTO TabelleForm29TauPer (Schicht, Baustoff, Stärke, My, sd, Lambda, Rt, Temperatur, p, ps, sdges) VALUES (@Schicht, @Baustoff, @Stärke, @My, @sd, @Lambda, @Rt, @Temperatur, @p, @ps, @sdges)"
    5. Dim ConnString As String
    6. Dim dt As New DataTable
    7. Dim strDB As String = IsoCalc.My.Computer.FileSystem.CurrentDirectory & "\ReportDataBase.mdb"
    8. Dim objConBuilder As New System.Data.OleDb.OleDbConnectionStringBuilder
    9. With objConBuilder
    10. .Add("Provider", "Microsoft.Jet.OLEDB.4.0")
    11. .Add("Data Source", strDB)
    12. .Add("User ID", "Admin")
    13. .Add("Password", "")
    14. End With
    15. ConnString = objConBuilder.ConnectionString
    16. conn = New System.Data.OleDb.OleDbConnection(ConnString)
    17. conn.ConnectionString = ConnString
    18. conn.Open()
    19. dt.Columns.Add("Schicht")
    20. dt.Columns.Add("Baustoff")
    21. dt.Columns.Add("Stärke")
    22. dt.Columns.Add("My")
    23. dt.Columns.Add("sd")
    24. dt.Columns.Add("Lambda")
    25. dt.Columns.Add("Rt")
    26. dt.Columns.Add("Temperatur")
    27. dt.Columns.Add("p")
    28. dt.Columns.Add("ps")
    29. dt.Columns.Add("sdges")
    30. Dim cmd As System.Data.OleDb.OleDbCommand
    31. For i = 0 To 7 Step 1
    32. cmd = New System.Data.OleDb.OleDbCommand(strSQL, conn)
    33. cmd.Parameters.AddWithValue("@Schicht", SchichtListTauPer.Item(i).ToString)
    34. cmd.Parameters.AddWithValue("@Baustoff", BaustoffListTauPer.Item(i).ToString)
    35. cmd.Parameters.AddWithValue("@Stärke", StärkeListTauPer.Item(i).ToString)
    36. cmd.Parameters.AddWithValue("@My", MyListTauPer.Item(i).ToString)
    37. cmd.Parameters.AddWithValue("@sd", sdListTauPer.Item(i).ToString)
    38. cmd.Parameters.AddWithValue("@Lambda", LambdaListTauPer.Item(i).ToString)
    39. cmd.Parameters.AddWithValue("@Rt", RtListTauPer.Item(i).ToString)
    40. cmd.Parameters.AddWithValue("@Temperatur", TempListTauPer.Item(i).ToString)
    41. cmd.Parameters.AddWithValue("@p", pListTauPer.Item(i).ToString)
    42. cmd.Parameters.AddWithValue("@ps", psListTauPer.Item(i).ToString)
    43. cmd.Parameters.AddWithValue("@sdges", sdgesList.Item(i).ToString)
    44. cmd.ExecuteNonQuery()
    45. cmd.Dispose()
    46. dt.Rows.Add(SchichtListTauPer.Item(i).ToString, BaustoffListTauPer.Item(i).ToString, StärkeListTauPer.Item(i).ToString, MyListTauPer.Item(i).ToString, sdListTauPer.Item(i).ToString, LambdaListTauPer.Item(i).ToString, RtListTauPer.Item(i).ToString, TempListTauPer.Item(i).ToString, pListTauPer.Item(i).ToString, psListTauPer.Item(i).ToString, sdgesList.Item(i).ToString)
    47. Next
    48. dt.AcceptChanges()
    49. Dim dtda As System.Data.OleDb.OleDbDataAdapter
    50. dtda = New System.Data.OleDb.OleDbDataAdapter(strSQL, ConnString)
    51. dtda.Update(dt)
    52. conn.Close()



    das läuft auch alles. im berichtsdesigner habe ich dann ein diagramm eingefügt und der kategoriegruppe die sdges-spalte der datenbanktabelle zugewiesen. in der series-collection ist der y-wert CDbl(Fields!Temperatur.value) und der x-wert CDbl(Fields!sdges.value)

    die werte erkennt das diagramm ja auch, nur es ordnet den x-werten die falschen y-werte zu.
    also ein typisiertes dataset hatte ich eh schon verwendet. aber ich habe die datentypen der felder in der mdb auf double angepasst. jetzt scheint es zu funktionieren.
    vielen dank einstweilen.
    werde übers we noch andere diagramme einfügen und entsprechend bearbeiten. ggf. melde ich mich dazu nochmal.