vangelisbb Δημοσ. 5 Φεβρουαρίου 2015 Δημοσ. 5 Φεβρουαρίου 2015 Καλησπέρα σας θα ήθελα τα φώτα σας σε ένα πρόβλημα που παλεύω εδώ και μέρες Προσπαθώ σε ένα 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 Ευχαριστώ για τον χρόνο σας
nucleus Δημοσ. 6 Φεβρουαρίου 2015 Δημοσ. 6 Φεβρουαρίου 2015 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?
Apoll Δημοσ. 6 Φεβρουαρίου 2015 Δημοσ. 6 Φεβρουαρίου 2015 Δεν ξέρω σε πιό στάδιο εξέλιξης είσαι αλλά εδώ μερικές συμβουλές.α) Μάθε να χρησιμοποιείς αντικείμενα, και μην φτιάχνεις 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.
Papakaliati Δημοσ. 6 Φεβρουαρίου 2015 Δημοσ. 6 Φεβρουαρίου 2015 Δεν ξέρω σε πιό στάδιο εξέλιξης είσαι αλλά εδώ μερικές συμβουλές. α) Μάθε να χρησιμοποιείς αντικείμενα, και μην φτιάχνεις 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. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα