Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σας θα ήθελα τα φώτα σας σε ένα πρόβλημα που παλεύω εδώ και μέρες

 

Προσπαθώ σε ένα datatable να βάλω μία στήλη η οποία να μου εμφανίζει μία εικόνα ανάλογα μία συνθήκη το κοντινότερο που κατάφερα να κάνω είναι να εμφανίσω την ίδια εικόνα παντού. 

Παρακάτω παραθέτω τον κώδικα ο οποίος μου εμφανίζει την ίδια εικόνα σε όλες της γραμμές

 

αυτό που θέλω να  καταφέρω είναι με βάση την παρακάτω συνθήκη 


                'If airportObject.accepted = 0 Then
                '    newAirportRow("Status") = εικονα1
                'ElseIf airportObject.accepted = 1 Then
                '    newAirportRow("Status") = εικονα2
                'ElseIf airportObject.accepted = 2 Then
                '    newAirportRow("Status") = εικονα3
                'End If

να εμφανίσω την αντίστοιχη εικόνα που έχω στα resources 

Public Sub pilotpireps()
        Try


            Dim inputToParse As String = GetPageAsString("getpireps", "&pilotID=" & My.Settings.PilotId)
            Dim withArrayRemoved As String = inputToParse.Remove(0, inputToParse.IndexOf("("))
            Dim withEqual As String = withArrayRemoved.Replace("=>", "=")
            Dim normalized As String = withEqual.TrimStart("(").Trim().TrimEnd(")")

            Dim airportsArray As New Dictionary(Of Integer, Dataclass)

            Dim splitWithCloseParenthesis As String() = normalized.Split(")")
            For Each token In splitWithCloseParenthesis
                If Not String.IsNullOrWhiteSpace(token) Then
                    Dim airport As New Dataclass(token)
                    If Not airportsArray.ContainsKey(airport.AirportCount) Then
                        airportsArray.Add(airport.AirportCount, airport)
                    End If
                End If
            Next
            Dim output As String = ""

            Dim airportsDatatable As New DataTable("PilotPireps")

            Dim flightid As New DataColumn("FlightId")
            Dim flightnumber As New DataColumn("Flight Number")
            Dim depap As New DataColumn("Departure A/P")
            Dim arrap As New DataColumn("Arrival A/P")
            Dim aircraft As New DataColumn("Aircraft")
            Dim flighttime As New DataColumn("Flight Time")
            Dim LandingRate As New DataColumn("Landing Rate")
            Dim FuelUsed As New DataColumn("Fuel Used")
            Dim DateOfFlight As New DataColumn("Date and Time Filled")
            'Dim PirepStatus As New DataColumn("Status")

         

            airportsDatatable.Columns.Add(flightid)
            airportsDatatable.Columns.Add(flightnumber)
            airportsDatatable.Columns.Add(aircraft)
            airportsDatatable.Columns.Add(depap)
            airportsDatatable.Columns.Add(arrap)
            airportsDatatable.Columns.Add(flighttime)
            airportsDatatable.Columns.Add(LandingRate)
            airportsDatatable.Columns.Add(FuelUsed)
            airportsDatatable.Columns.Add(DateOfFlight)

            'airportsDatatable.Columns.Add(PirepStatus)


            For Each airportRow As KeyValuePair(Of Integer, Dataclass) In airportsArray
                Dim airportObject As Dataclass = airportRow.Value
                Dim newAirportRow As DataRow = airportsDatatable.NewRow

                newAirportRow("FlightId") = airportObject.id
                newAirportRow("Flight Number") = airportObject.code & airportObject.flightnum
                newAirportRow("Departure A/P") = airportObject.depname & "(" & airportObject.depicao & ")"
                newAirportRow("Arrival A/P") = airportObject.arrname & "(" & airportObject.arricao & ")"
                newAirportRow("Aircraft") = airportObject.aircraft
                newAirportRow("Flight Time") = airportObject.flighttime
                newAirportRow("Landing Rate") = airportObject.landingrate
                newAirportRow("Fuel Used") = airportObject.fuelused
                newAirportRow("Date and Time Filled") = airportObject.submitdate

                'If airportObject.accepted = 0 Then
                '    newAirportRow("Status") = "Approval Pending"
                'ElseIf airportObject.accepted = 1 Then
                '    newAirportRow("Status") = "Accepted"
                'ElseIf airportObject.accepted = 2 Then
                '    newAirportRow("Status") = "Rejected"
                'End If
                airportsDatatable.Rows.Add(newAirportRow)
            Next

            FrmMain.DataGridLogBook.DataSource = airportsDatatable
            FrmMain.DataGridLogBook.AllowUserToAddRows = False
            FrmMain.DataGridLogBook.Columns(0).Visible = False
            FrmMain.DataGridLogBook.Columns(1).Visible = False
            Dim img As New DataGridViewImageColumn("Image")
            img.Image = My.Resources.pending
            FrmMain.DataGridLogBook.Columns.Add(img)
            img.HeaderText = "Image"
            img.Name = "img"
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

έχω δοκιμάσει να βγάλω άκρη από το msdn αλλά χωρίς επιτυχία

https://msdn.microsoft.com/en-us/library/x0tz73t0(v=vs.110).aspx 

Ευχαριστώ για τον χρόνο σας

Δημοσ.

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewimagecolumn.image%28v=vs.100%29.aspx

 

από ότι βλέπω χρησιμοποιείς το σωστό datacolumn DataGridViewImageColumn αλλά δεν του βάζεις των σωστό τύπο.

Property Value
Type: System.Drawing.Image
The Image to display. The default is null.

Το My.Resources.pending σίγουρα σου επιστρέφει System.Drawing.Image?

Δημοσ.

Δεν ξέρω σε πιό στάδιο εξέλιξης είσαι αλλά εδώ μερικές συμβουλές.

α) Μάθε να χρησιμοποιείς αντικείμενα, και μην φτιάχνεις datatables
Ο κώδικας θα είναι πιο καθαρός, και η ευχρηστία ακόμα μεγαλύτερη. Κάνεις databind την list των αντικειμένων στο gridview. Και αν θες να δεις την επιλογή, ακόμα πιο εύκολη μιας και θα σου επιστρέψει αντικείμενο και όχι datarow.


β) Μην χρησιμοποιείς nested if αλλά select case για πάνω από ένα IF ELSE ο κώδικας είναι πιο καθαρός. (και αυτό είναι property του αντικειμένου οπότε δεν θα είναι στον κύριο κώδικα)

γ) προσθέτεις την DataGridViewImageColumn αφού έχεις ορίσει το datasource. Δήλωσέ τη στο grid όταν το ορίζεις αυτό.

δ) χρησιμοποίησε String.Format και όχι μία τεράστια σειρά από & όταν θες να φτιάξεις strings έτσι.

ε) Πιστεύω αυτή είναι winforms app. Άσε τα winforms να ψοφίσουν. Αν είσαι στην αρχή, γύρνα το σε wpf, τα control είναι πολύ πιο δυναμικά και ευκολόχρηστα. Και αν τώρα μαθαίνεις, κατευθείαν σε ASP.NET MVC.

Δημοσ.

Δεν ξέρω σε πιό στάδιο εξέλιξης είσαι αλλά εδώ μερικές συμβουλές.

 

α) Μάθε να χρησιμοποιείς αντικείμενα, και μην φτιάχνεις datatables

Ο κώδικας θα είναι πιο καθαρός, και η ευχρηστία ακόμα μεγαλύτερη. Κάνεις databind την list των αντικειμένων στο gridview. Και αν θες να δεις την επιλογή, ακόμα πιο εύκολη μιας και θα σου επιστρέψει αντικείμενο και όχι datarow.

 

 

β) Μην χρησιμοποιείς nested if αλλά select case για πάνω από ένα IF ELSE ο κώδικας είναι πιο καθαρός. (και αυτό είναι property του αντικειμένου οπότε δεν θα είναι στον κύριο κώδικα)

 

γ) προσθέτεις την DataGridViewImageColumn αφού έχεις ορίσει το datasource. Δήλωσέ τη στο grid όταν το ορίζεις αυτό.

 

δ) χρησιμοποίησε String.Format και όχι μία τεράστια σειρά από & όταν θες να φτιάξεις strings έτσι.

 

ε) Πιστεύω αυτή είναι winforms app. Άσε τα winforms να ψοφίσουν. Αν είσαι στην αρχή, γύρνα το σε wpf, τα control είναι πολύ πιο δυναμικά και ευκολόχρηστα. Και αν τώρα μαθαίνεις, κατευθείαν σε ASP.NET MVC.

  Συμφωνω 100% και πιστευω θα πρεπει να αφιερωσεις λιγο χρονο να το μαθεις με τον σωστο τροπο, γιατι αυτο που προσπαθεις να κανεις τωρα ειναι painful. Απο εκει και περα το τι θα δειχνει η στηλη θα το χειριστεις με το event που εχει το datagrid , φανταζομαι θα λεγεται on Cell Value Changed η καπως ετσι και θα το θεσεις οταν η τιμη του στατους ειναι τασε να εμφανιζει την δινα image.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...