DATENBANK-Rechnen mit Spalten klappt leider nicht

  • .NET (FX) 4.5–4.8
  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von TomWi.

    DATENBANK-Rechnen mit Spalten klappt leider nicht

    Hallo,

    wir ihr im Header schon lesen könnt, habe ich Probleme beim Rechnen mit Spalten.
    Ich habe eine Tabelle mit vier Spalten. (Artikel, Menge, Nettopreis und Gesamtpreis).
    In der Spalte Gesamtpreis, soll nun das Ergebnis aus Menge*Nettopreis stehen. Klappt leider nicht.

    hier mal mein bisheriger Code: Vielleicht kann mir ja jemand sagen, warum es nicht funktioniert

    VB.NET-Quellcode

    1. Private Sub cmdTest_Click(sender As Object, e As EventArgs) Handles cmdTest.Click
    2. Dim con As SqlCeConnection = New SqlCeConnection()
    3. Dim cmd As SqlCeCommand = New SqlCeCommand()
    4. Dim ds As New DataSet
    5. Dim da As SqlCeDataAdapter = New SqlCeDataAdapter()
    6. Try
    7. con.ConnectionString = "Data Source=C:\Users\Thomas\documents\visual studio 2012\Projects\GH_Faktura\LayherGeruest.sdf"
    8. cmd.CommandText = "SELECT * FROM LayherArtikel"
    9. cmd.Connection = con
    10. da.SelectCommand = cmd
    11. ds = New DataSet
    12. da.Fill(ds, "LayherArtikel")
    13. 'DataGrid1.DataSource = ds
    14. Dim tbl As New DataTable
    15. tbl = ds.Tables("LayherArtikel")
    16. With tbl
    17. .Columns(3).Expression = "Nettopreis + Menge"
    18. End With
    19. Catch ex As Exception
    20. MessageBox.Show(ex.Message)
    21. End Try
    22. ' Me.LayherArtieklTableAdapter.Fill(Me.LayherGeruestDataSet.LayherArtiekl)
    23. con.Open()
    24. cmd.ExecuteNonQuery()
    25. con.Close()
    26. End Sub


    Danke schon mal vorab.
    Tom

    shaebich schrieb:

    vielleicht solltest du erst einmal column(3) hinzufügen bevor du ihr ne expression gibst.

    Gibts eventuell auch ne Fehlermeldung oder sonstiges?


    Hi,

    die 3 ist doch der Index von Spalte4, oder seh ich das Falsch. Und in der 4. Spalte soll der Gesamtpreis stehen.
    Ne Fehlermeldung gibt es leider nicht. Es passiert nur einfach nix.

    VB.NET-Quellcode

    1. Dim tbl As New DataTable
    2. tbl = ds.Tables("LayherArtikel")
    3. With tbl
    4. .Columns(3).Expression = "Nettopreis + Menge"
    5. End With


    für mich sieht es hier nur aus das du der "Spalte4" hier die Expression gibst. Aber existiert die vierte Spalte in deiner DataTable? ...
    Du solltest die Spalte erst einmal hinzufügen.

    TomWi schrieb:

    die 3 ist doch der Index von Spalte4, oder seh ich das Falsch. Und in der 4. Spalte soll der Gesamtpreis stehen.
    Ja, aber du kannst doch nicht einfach eine Expression in eine Column schreiben, die vonne Datenbank her vlt. ganz anners angelegt ist.
    Inne DB scheints ja auch schon eine Spalte4 zu geben - was steht denn da da drin?

    Im Ernst: Datenbänkerei-Einstieg, auch wenn du's ignorierst.
    also die Spalte 4 ist die Gesamtpreisspalte und die ist noch leer. So soll es ja auch sein. Erst wenn ich die Menge eingebe, dann soll dort das Produkt aus Menge und Nettopreis stehen.
    Spalte 4 heißt "Gesamtpreis" und ist vom Datentyp "Money"

    Ich hab den Link nicht ignoriert, nur noch keine Zeit gehabt, mir das Ding genauer anzuschauen. Dennoch vielen Dank dafür. Ich werde es mir auf jeden Fall noch zu Gemüte führen.

    Tom
    Der witz ist nämlich, eine Spalte "Gesamtpreis" sollte es in der DB gar net geben. Berechnete Werte sind redundant (weil können ja jederzeit berechnet werden), und haben daher inne DB nix verloren (RedundanzVerbot).

    Ich könnte mir vorstellen, die Spalte, der du die Expression aufzudrücken versuchst, nimmt die gar nicht an. Hast du mal überprüft, column.Expression wieder abzurufen, nachdem es zugewiesen wurde?

    aber wie gesagt: für DB ist imo noch zu früh, erstmal wäre der Umgang mittm typisierten Dataset, Databinding etc zu lernen.
    So,

    nun klappt auch dar Rechnen mit der Tabelle. Sogar das Filtern einer bestimmten Spalte klappt jetzt. Hab einiges lernen können, aus den Links vom ErfinderDesRades. Vielen Dank nochmal.

    Jetzt hätte ich da noch ne Frage zum Style des DataGridView. Wie kann ich es anstellen, dass jede 2. Zeile(Row) eingefärbt. wird.

    Der Ansatz den ich habe, funktioniert leider nur Teilweise
    Hier der Code

    VB.NET-Quellcode

    1. Sub ZeilenEinfaerben()
    2. For i = 0 To DataGridView1.RowCount Step 2
    3. DataGridView1.Rows(i).DefaultCellStyle.BackColor = Color.Aqua
    4. Next
    5. End Sub


    Leider kommt ne Fehlermeldnung, dass der Index außerhalb des Bereichs ist und nicht negativ und kleiner als die Auflistung sein darf, wenn ich die Tabelle nach einer Spalte filtere und der Filter zeigt mir nur noch 1 Row an.

    Gibt es evtl. eine Möglichkeit, das DGV über die Eigenschaften so zu gestalten, wie ich es haben möchte?