BindingNavigator CountItem als Toolstriplabel?

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

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

    BindingNavigator CountItem als Toolstriplabel?

    Nabend..

    hoffe ich drücke mich richtig aus.

    Habe ein kleines einfaches Adressbuch mit BindingSoruce erstellt speichert die Daten in eine xml Datei.

    Habe KEINEN BindingNavigator habe diese durch Buttons ausgetauscht. Funktioniert auch.

    Unten habe ich ein Toolstrip eingebaut dort wird mit das Datum und der Pfad der Datei angezeigt.

    Jetzt möcht ich gerne das im Toolstriplabel4 die Anzahl der Datensätze angezeigt wird. Komme aber nicht drauf wie.

    Mit Pfad bzw Datum und uhrzeit habe ich so gemacht.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. ToolStripLabel1.Text = Path.GetDirectoryName(Application.ExecutablePath)
    3. ToolStripLabel2.Text = DateTime.Now.ToLocalTime


    Wie bekomme ich jetzt das CountItem da rein?

    Hoffe die Infos sind ausreichend.

    Für eine Hilfe Danke ich jetzt schon.

    Upps habe gerade gesehen das ich im falschem Forum geschrieben habe. Gehört eigentlich in sonstige Problemstellung.

    Gruß
    Manni

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

    Da ich nicht weiß wie die Daten in der XML gespeichert sind, rate ich mal und werfen "Per For Each Schleife die Datensätze zählen" in den Raum.

    P.S. Bitte benenne deine Controls gescheit.

    Edit: Sorry jetzt erst gesehen das du mit der BindingSource arbeitest. Da kann ich nur wenig helfen, aber vielleicht hilft das: msdn.microsoft.com/de-de/libra…forms.bindingsource.count
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „mrMo“ ()

    Hat mein Link nicht geholfen? Da steht:
    BindingSource1.Count.ToString()

    Alternativ, wenn du mit einem DataGridView arbeitest, zähle die Zeilen. Wobei der Weg über die BindingSource eleganter wäre.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    VB.NET-Quellcode

    1. DeineBindingSource.Count.ToString
    ist schon der richtige Weg.
    Wenn die Datensätze sehr viele sind, würde sich noch ein

    VB.NET-Quellcode

    1. String.Format("Anzahl Datensätze {0:0,0}",DeineBindingsource.Count)
    anbieten um die Zahl etwas svhöner zu formatieren
    "Hier könnte Ihre Werbung stehen..."
    morgen...

    grundsätzlich funktioniert es. Es wird mir die Anzahl der Datensätze angezeigt.
    Während der Laufzeit.
    Schließe ich die Form und starte das Prog. wieder wird mir 0 Angezeigt.
    Füge ich einen neuen Datensatz hinzu. Wird mir wieder die richtige Anzahl angezeigt.

    Ich weis Controlls habe ich noch nicht umbenannt

    Hier habe ich den Code eingefügt


    Form Load

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. ToolStripLabel1.Text = Path.GetDirectoryName(Application.ExecutablePath)
    3. ToolStripLabel2.Text = DateTime.Now.ToLocalTime
    4. ToolStripLabel4.Text = "Anzahl Datensätze: " + KontaktBindingSource.Count.ToString()
    5. If My.Computer.FileSystem.FileExists(xmldatabasedata) = True Then
    6. DataSet1.ReadXml(xmldatabasedata)
    7. End If
    8. End Sub


    Datensatz löschen

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Try
    3. Select Case MessageBox.Show("Datensatz wirklich löschen?", "Löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    4. Case Windows.Forms.DialogResult.Yes
    5. KontaktBindingSource.RemoveCurrent()
    6. ToolStripLabel4.Text = "Anzahl Datensätze: " + KontaktBindingSource.Count.ToString()
    7. End Select
    8. Catch ex As Exception
    9. MsgBox("Keine Daten zum löschen vorhanden")
    10. End Try
    11. End Sub


    Datensatz hinzufügen

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. KontaktBindingSource.AddNew()
    3. ToolStripLabel4.Text = "Anzahl Datensätze: " + KontaktBindingSource.Count.ToString()
    4. If Me.VornameTextBox.Text = Nothing Then 'Wenn nichts in der Textbox steht
    Bilder
    • neustartForm.jpg

      24,05 kB, 567×230, 143 mal angesehen
    • hinzufügenDaten.jpg

      24,83 kB, 535×224, 127 mal angesehen
    Du zählst erst die Datensätze in der Bindingsource (die zu dem Zeitpunkt leer ist) und liest dann erst die Datensätze ein ;(

    Und benutze bitte nicht My.Computer.... dafür gibt es den System.IO namespace.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. ToolStripLabel1.Text = Path.GetDirectoryName(Application.ExecutablePath)
    3. ToolStripLabel2.Text = DateTime.Now.ToLocalTime
    4. If My.Computer.FileSystem.FileExists(xmldatabasedata) = True Then
    5. DataSet1.ReadXml(xmldatabasedata)
    6. ToolStripLabel4.Text = "Anzahl Datensätze: " + KontaktBindingSource.Count.ToString()
    7. End If
    8. End Sub


    Hier mal Methoden zum Laden und Speichern deines Dataset

    VB.NET-Quellcode

    1. Private _DataPath As String = "DeinPfadHierRein"
    2. Private _DataFile As New FileInfo(_DataPath & "HierDerNameDerXMLRein.xml")
    3. Public Sub LoadDataSet(ByVal myDS As DataSet)
    4. myDS.Clear()
    5. If _DataFile.Exists Then
    6. myDS.ReadXml(_DataFile.FullName)
    7. End If
    8. End Sub
    9. Public Sub SaveDataSet(ByVal myDS As DataSet)
    10. myDS.WriteXml(_DataFile.FullName)
    11. myDS.AcceptChanges()
    12. End Sub


    Aufruf:
    LoadDataSet(DataSet1) oder SaveDataSet(DataSet1)
    "Hier könnte Ihre Werbung stehen..."
    Hi Micha..

    hier mal der Code von mir.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    4. Private xmldatabasedata As String = My.Application.Info.DirectoryPath & "\kontakte.xml"
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. ToolStripLabel1.Text = Path.GetDirectoryName(Application.ExecutablePath)
    7. ToolStripLabel2.Text = DateTime.Now.ToLocalTime
    8. ToolStripLabel4.Text = "Anzahl Datensätze: " + KontaktBindingSource.Count.ToString()
    9. If My.Computer.FileSystem.FileExists(xmldatabasedata) = True Then
    10. DataSet1.ReadXml(xmldatabasedata)
    11. End If
    12. End Sub
    13. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    14. Validate()
    15. KontaktBindingSource.EndEdit()
    16. DataSet1.WriteXml(xmldatabasedata)
    17. Refresh()
    18. End Sub
    19. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    20. Try
    21. Select Case MessageBox.Show("Datensatz wirklich löschen?", "Löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    22. Case Windows.Forms.DialogResult.Yes
    23. KontaktBindingSource.RemoveCurrent()
    24. ToolStripLabel4.Text = "Anzahl Datensätze: " + KontaktBindingSource.Count.ToString()
    25. End Select
    26. Catch ex As Exception
    27. MsgBox("Keine Daten zum löschen vorhanden")
    28. End Try
    29. End Sub
    30. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    31. KontaktBindingSource.AddNew()
    32. ToolStripLabel4.Text = "Anzahl Datensätze: " + KontaktBindingSource.Count.ToString()
    33. If VornameTextBox.Text = Nothing Then
    34. VornameTextBox.Focus()
    35. VornameTextBox.BackColor = Color.AliceBlue
    36. Exit Sub
    37. End If
    38. End Sub
    39. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    40. KontaktBindingSource.MoveNext()
    41. End Sub
    42. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    43. KontaktBindingSource.MovePrevious()
    44. End Sub
    45. Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    46. KontaktBindingSource.MoveFirst()
    47. End Sub
    48. Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    49. KontaktBindingSource.MoveLast()
    50. End Sub
    51. Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
    52. Me.Validate()
    53. KontaktBindingSource.EndEdit()
    54. DataSet1.WriteXml(xmldatabasedata)
    55. Close()
    56. End Sub
    57. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    58. KontaktBindingSource.Filter = String.Format("nachname like '%{0}%' or vorname Like '%{0}%'or telefon Like '%{0}%'or anrede Like '%{0}%'or ort Like '%{0}%'", TextBox1.Text)
    59. End Sub
    60. End Class


    Jetzt weis ich nicht genau was du mit deinem Code meinst.

    VB.NET-Quellcode

    1. Private _DataPath As String = "DeinPfadHierRein"
    2. Private _DataFile As New FileInfo(_DataPath & "HierDerNameDerXMLRein.xml")
    3. Public Sub LoadDataSet(ByVal myDS As DataSet)
    4. myDS.Clear()
    5. If _DataFile.Exists Then
    6. myDS.ReadXml(_DataFile.FullName)
    7. End If
    8. End Sub
    9. Public Sub SaveDataSet(ByVal myDS As DataSet)
    10. myDS.WriteXml(_DataFile.FullName)
    11. myDS.AcceptChanges()
    12. End Sub


    Danke
    Manni

    manni4545 schrieb:

    Jetzt weis ich nicht genau was du mit deinem Code meinst.
    Er wollte dir mit seinem Code nur zeigen, wie er sein Dataset persistiert. Du verwendest den My-Namespace und er macht das über die FileInfo-Klasse...
    Du rufst die Anzahl der Daten schon vor dem Befüllen des Datasets ab - daher ist das Ergebnis immer 0. Schau dir deine Zeilen ab #8 und darunterliegende einmal genau an und vergleiche sie mit dem ersten Codelisting von @MichaHo ...
    Hi,
    wie @VB1963 schon sagte, benutze ich zum Laden und Speichern die FileInfo Klasse.
    Wenn Du öfter mit DataSets arbeitest, bietet es sich an, diese Methoden auszulagern in eine eigene Klasse und dann aufzurufen wenn Du sie brauchst.
    Du benutzt in Deinem Code auch eine Mischung aus .Net und VB6.
    Ich habe Deinen Code mal etwas angepasst:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    4. 'Private xmldatabasedata As String = My.Application.Info.DirectoryPath & "\kontakte.xml"
    5. Private _DataPath As String = Application.StartupPath
    6. Private _DataFile As New FileInfo(_DataPath & "\kontakte.xml")
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. LoadDataSet(DataSet1)
    9. ToolStripLabel1.Text = Path.GetDirectoryName(Application.ExecutablePath)
    10. ToolStripLabel2.Text = DateTime.Now.ToLocalTime
    11. ToolStripLabel4.Text = String.Format("Anzahl Datensätze: {0:0,0}",KontaktBindingSource.Count)
    12. End Sub
    13. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    14. Validate()
    15. KontaktBindingSource.EndEdit()
    16. SaveDataSet(DataSet1)
    17. Refresh()
    18. End Sub
    19. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    20. If MessageBox.Show("Datensatz wirklich löschen?", "Löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
    21. KontaktBindingSource.RemoveCurrent()
    22. ToolStripLabel4.Text = String.Format("Anzahl Datensätze: {0:0,0}",KontaktBindingSource.Count)
    23. Else
    24. MessageBox.Show("Keine Daten zum löschen vorhanden","Fehler...")
    25. End If
    26. End Sub
    27. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    28. KontaktBindingSource.AddNew()
    29. ToolStripLabel4.Text = String.Format("Anzahl Datensätze: {0:0,0}",KontaktBindingSource.Count)
    30. If String.IsNullOrEmpty(VornameTextBox.Text) Then
    31. VornameTextBox.Focus()
    32. VornameTextBox.BackColor = Color.AliceBlue
    33. Return
    34. End If
    35. End Sub
    36. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    37. KontaktBindingSource.MoveNext()
    38. End Sub
    39. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    40. KontaktBindingSource.MovePrevious()
    41. End Sub
    42. Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    43. KontaktBindingSource.MoveFirst()
    44. End Sub
    45. Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    46. KontaktBindingSource.MoveLast()
    47. End Sub
    48. Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
    49. Me.Validate()
    50. KontaktBindingSource.EndEdit()
    51. SaveDataSet(DataSet1)
    52. Me.Close()
    53. End Sub
    54. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    55. KontaktBindingSource.Filter = String.Format("nachname like '%{0}%' or vorname Like '%{0}%'or telefon Like '%{0}%'or anrede Like '%{0}%'or ort Like '%{0}%'", TextBox1.Text)
    56. End Sub
    57. Public Sub LoadDataSet(ByVal myDS As DataSet)
    58. myDS.Clear()
    59. If _DataFile.Exists Then
    60. myDS.ReadXml(_DataFile.FullName)
    61. End If
    62. End Sub
    63. Public Sub SaveDataSet(ByVal myDS As DataSet)
    64. myDS.WriteXml(_DataFile.FullName)
    65. myDS.AcceptChanges()
    66. End Sub
    67. End Class

    Sicherlich könnte man da noch mehr anpassen... benutzt Du zur Anzeige der Daten ein DataGridView?
    "Hier könnte Ihre Werbung stehen..."
    ja, aber wenn du ein DGV hast, was willst du dann mit Buttons für Vorwärts/Rückwärts?
    Kein User wird das je benutzen, weil Navigation im Datenbestand ist mit einem DGV viel mächtiger: Da kann man zeilenweise vorwärts/rückwärt, seitenweise, und erste/letzte Zeile, und ausserdem mitte Scrollbar - ist ja alles bereits eingebaut.
    Finde die Knöpfe für Vor/Zurück auch nicht sonderlich dolle. Hab doch das Grid zum Navigieren. Übrigens zeigen die Pfeile Erster/Letzter Datensatz in die falsche Richtung ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hi,
    also Erster Datensatz und Letzter Datensatz (bitte Icons tauschen) macht jedenfalls sin, wenn man sehr viele Daten hat und im DGV nicht ständig scrollen will.
    Aber Vor/Zurück kannst Du Dir sparen, das macht die Tab Taste im DGV.
    Ansonsten sieht die Form doch recht ansprechend aus...
    "Hier könnte Ihre Werbung stehen..."
    Auch zum Anfang/Ende kann man mit DGV hopsen - [Strg-Pos1], [Strg-End]

    Ich würde die meisten Spalten aus dem DGV entfernen, und nur die signifikanten drinne lassen (Name, Vorname, Telefon). Alles weitere wird doch in der Maske präsentiert - wieso also doppelt moppeln, und das DGV damit überfrachten?
    Dann würde ich das (nun schmale) DGV links an den Rand docken, damit man möglichst viele Zeilen sehen kann.
    Denn die Zeilen sind ja das, woraus der User aussucht, und wenn er viele Zeilen sieht, hat er einen guten Überblick und kann schnell den gesuchten anklicksen (und sieht dann in der Maske alle Details)