File.Exists Frage

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    File.Exists Frage

    Hallo,

    mit u. g. Code lade ich Bilder in ein DataGrid.

    wenn ich zwei Zeilen habe im DGV, wird nur die erste Zeile mit einem Bild versehen, die zweite nur noch mit dem typischen Windows X.

    Die Angaben sind vorhanden und das Bild ist auch vorhanden... Dateibezeichnung stimmt auch..

    Kann es sein, dass bei der Überprüfung von File.Exists evtl. auch die Rückantwort nicht gewartet wird... weil der Pfad ein Netzwerkpfad is und es zu lange dauert und er dann einfach weiter macht ?

    VB.NET-Quellcode

    1. Private Sub Bild_DIMS_laden()
    2. ' --- Bild im DGV wiedergeben
    3. Dim CellImage As New DataGridViewImageCell
    4. Dim Bild_Id_Pfad As String
    5. For i = 0 To DGV_Personen.Rows.Count - 1
    6. If DGV_Personen.Rows(i).Cells(12).Value.ToString <> "" Then
    7. Bild_Id_Pfad = Form1.Archiv_Pfad & _
    8. "\FILES_" & Form1.Archiv_Name & "\FILES\Pers_SECRET\" & _
    9. DGV_Personen.Rows(i).Cells(12).Value & ".jpg"
    10. If File.Exists(Bild_Id_Pfad) Then
    11. CellImage.Value = Image.FromFile(Bild_Id_Pfad)
    12. CellImage.ImageLayout = DataGridViewImageCellLayout.Zoom
    13. DGV_Personen.Rows(i).Cells(13) = CellImage
    14. End If
    15. End If
    16. ' --- Hintergrund ändern bei Statusänderung
    17. If DGV_Personen.Rows(i).Cells(11).Value = "False" Then
    18. DGV_Personen.Rows(i).Cells(5).Style.BackColor = Color.LightPink
    19. DGV_Personen.Rows(i).Cells(6).Style.BackColor = Color.LightPink
    20. End If
    21. Next
    22. End Sub

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

    ich würde die Bilder mit in die DataTable hineinladen, und per OwnerDrawing anzeigen.
    OwnerDrawing, da man damit für NullValues ein gemeinsames Ersatzbild darstellen kann.
    Wenn man einzelne Zellen bebildert anstatt über das datenmodell zu gehen, kriegt man Probleme, wenn der User sortieren oder Filtern will.
    Die Befüllung dieser speziellen Spalte braucht ja nicht aus der DB zu erfolgen - die TableAdapter brauchen das garnet mitzukriegen.
    oder man packt die Bilder tatsächlich in die DB - die wird dadurch aber recht fett, aber ich glaub nichtmal bei Acces oder SqlCe, dass ein bebilderter PersonalStamm die DB an ihre Grenze bringen würde.
    in DBExtensions habich die Bilder sogar auch im DatasetOnly-Projekt, unds stört niemanden.
    Hi du :)

    ok... deinen Beitrag muß ich noch paar mal lesen, bevor ich den verstehe...

    aber ... die Bilder möchte ich eigentlich nicht in eine DB packen... möcht Sie schon auf der Platte lassen...


    habe aber durch zufall was entdeckt...

    Beim Durclaufen der for schleife, wird diese (warum weis ich nicht) nach dem ersten Bild verlassen und das ohne Fehlermeldug!

    hier mein testcode: (in dem DGV werden 6 Einträge angezeigt, Eintrag 0 hat kein Bild, Eintrag 1 hat ein Bild und danach geht nix weiter)

    VB.NET-Quellcode

    1. Private Sub Bild_DIMS_laden()
    2. ' --- Bild im DGV wiedergeben
    3. Dim CellImage As New DataGridViewImageCell
    4. Dim Bild_Id_Pfad As String
    5. For i = 0 To DGV_Personen.Rows.Count - 1
    6. MsgBox(i)
    7. If DGV_Personen.Rows(i).Cells(12).Value.ToString <> "" Then
    8. Bild_Id_Pfad = Form1.Archiv_Pfad & _
    9. "\FILES_" & Form1.Archiv_Name & "\FILES\Pers_SECRET\" & _
    10. DGV_Personen.Rows(i).Cells(12).Value & ".jpg"
    11. If File.Exists(Bild_Id_Pfad) Then
    12. CellImage.Value = Image.FromFile(Bild_Id_Pfad)
    13. CellImage.ImageLayout = DataGridViewImageCellLayout.Zoom
    14. DGV_Personen.Rows(i).Cells(13) = CellImage
    15. Else
    16. MsgBox("0")
    17. End If
    18. Else
    19. MsgBox("1 " & i)
    20. End If
    21. ' --- Hintergrund ändern bei Statusänderung
    22. If DGV_Personen.Rows(i).Cells(11).Value = "False" Then
    23. DGV_Personen.Rows(i).Cells(5).Style.BackColor = Color.LightPink
    24. DGV_Personen.Rows(i).Cells(6).Style.BackColor = Color.LightPink
    25. End If
    26. Next
    27. End Sub

    lris08 schrieb:

    Beim Durclaufen der for schleife, wird diese (warum weis ich nicht) nach dem ersten Bild verlassen und das ohne Fehlermeldug!

    Diese Framework-Katastrophe ist mir nur von DragnDrop bekannt. Ganz übles Fehldesign seitens MS - (aber ich hab mir ein Workaround dafür ausgedacht)

    Hat das was mit D&D zu tun?
    :) nein nein... hat gar nichts mir Drag & Drop zu tun.

    Habe nu auch das mal mit dem BakColor rausgenommen und die SChleife nur mit der "Bildverarbeitung" laufen lassen und habe noch ein Try Catch reingemacht... und siehe da er meckert doch...

    Ausgabe von ex.message:

    Die angegebene Zeile gehört bereits zu einem Raster. Dieser Vorgang ist ungültig.


    was soll der schmarn? ... DGV zählen von 0 b is x und durchlaufen lassen, wenn Ende erreicht ... Ende mich schleife...


    EDIT:
    Das habe ich als Vorlage verwendet:
    Softwareentwickler-Blog