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

VS C# Custom Control


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

Δημοσ.

Και με αυτό τον τρόπο δεν μπορώ να δμιουργήσω περισσοτερες από 65000 στηλες με τους τρόπους που ήδη γνωρίζω.

Αυτό είναι το πρόβλημα που θέλω να ξεπεράσω.

Δεν θα διμιουργησεις εκ στηλες!! Σου ειπα το πηγενες λαθος.

Θα δημιουργησεις εναν table navigator ξερωγω πως να το ονομασω..

 

Που θα κανει το παρακατω

post-216584-0-35421100-1354898962_thumb.png

 

φτιαξε ενα control πανω στην listview (report view), βαλτου κουμπια σκρολς ή οτι θες και "δεστο" με την db (EF, DT οτι θες). Ουσιαστη κανε zoom των δεδομενων. Δεν θα τα φορτωσεις ολα! Το control θα εχει ξερωγω 5-6 στηλες και 10-20 γραμμες.

 

πχ στην εικονα δειχνει το C:20 Ε:25, σε αυτη την περιπτωση θα εχεις μονο 3 στηλες (x,y,z) και 5 γραμμες, αυτα θα φορτωσεις και αυτα θα φτιαξεις. Οταν θες να δεις τα δεδομενα της στηλης μετα την z απλα βαλε ενα σκρολ, κουμπι ή οτι αλλο θες που με το πατημα θα σου δινει την ψευδαισθηση οτι παει δεξια, αλλα ουσιαστικα την στηλη headerZ θα το ονομαζει headerY, headerY-> headerZ και το headerZ με την νεα στηλη, το ιδιο και με τα δεδομενα.

Δηλαδη θα εχεις παντα 20 κελια ολα και ολα, τα οποια ομως θα σου δινουν την ψευδαισθηση οτι εχεις απειρα.

Δημοσ.

@Defacer Μα δεν θα τις δείχνω όλες.Θέλω απλά να είναι διαθέσιμα τα 1.000.000 headers μου (τα οποία δεν θα πιάνουν τόσο χώρο στην μνήμη) και ανάλογα σε ποιο θα σκρολάρω τότε θα εμφανίζονται αυτά όπως και οι τιμές στο πλέγμα μου.

 

Αυτό όμως δεν απαντάει στην ερώτησή μου. Αν έχεις 1.000.000 στήλες και ας πούμε 2000 pixels (είμαι μπρούκλης) στο scroll bar, τότε κάθε ένα pixel θα αντιστοιχεί σε 50Κ στήλες. Πώς ακριβώς θα σκρολάρεις;

 

Επίσης, πατώντας π.χ. ένα κουμπί για scroll (ας πούμε page down αλλά στην οριζόντια εκδοχή) θα σκρολάρεις κατα 50 στήλες (είπαμε είμαι μπρούκλης). Δεδομένου ότι ο μέγιστος ρυθμός επανάληψης είναι ας πούμε 40 keypresses/sec (μπρούκλης) τότε σε ένα δευτερόλεπτο μπορείς να σκρολλάρεις 2K στήλες. Δηλαδή θα σου πάρει 25 δευτερόλεπτα αναμονής να σκρολλάρεις όχι βέβαια από τη μία άκρη στην άλλη αλλά απλώς στην περιοχή στηλών που καλύπτεται από το 1 pixel του scrollbar που λέγαμε παραπάνω.

 

Και όλα αυτά δεδομένου ότι ξέρεις και που θέλεις να σκρολάρεις περίπου έτσι;

 

Το point μου είναι πως το "θα σκρολάρω" δεν είναι ικανοποιητική απάντηση.

Δημοσ.

C# δεν γνωρίζω, αλλά γενικότερα για huge data το approach που λέει ο παπι χρησιμοποείται. Που βασικά δεν είναι τίποτε άλλο από την έννοια του "παραθύρου".

 

Λεπτομέρεις για το πως αρκιβώς θα το κάνεις με C# και WinForms δυστυχώς δεν ξέρω να σου πω. Το γενικότερο concept όμως είναι να έχεις ένα fixed-sized buffer μέσα στο οποίο θα φορτώνεις κάθε φορά το κομμάτι των data που βρίσκεται πέριξ της τρέχουσας θέσης σου. Φαντάσου του κάτι σαν παράθυρο-κέρσορα.

 

Aν έχεις π.χ data 10000 γραμμές επί 10000 στήλες, το buffer σου θα χωράει ας πούμε 100 γραμμές x 100 στήλες, και θα "ξεκινάει" από την πάνω αριστερή γωνία των κανονικών data (btw, δεν είναι απαραίτητο η scrollable-area να αντιστοιχεί 1:1 στον χώρο του παραθύρου... μπορεί π.χ. το buffer σου να το έχεις 400x400 και τo παράθυρο 100x100, οπότε αν το scrolling δεν βγαίνει έξω από το buffer θα γίνεται χωρίς κολλήματα, γιατί θα το δουλεύεις απευθείας στη μνήμη).

 

Μόλις η μετακίνηση του παραθύρου σου ζητήσει χώρο εκτός ορίων του buffer, τότε θα φορτώνεις τα έξτρα data στο buffer σου, φροντίζοντας προφανώς να διευθετήσεις τυχόν επικαλύψεις (δηλαδή να κάνεις overwite στο buffer μονάχα όσα data του γίνονται invalidate, που κατά κανόνα δεν θα είναι όλα).

Δημοσ.

Δεν μπορώ να φανταστώ πιο πρόβλημα είναι αυτό το οποίο χρειάζεται ο χρήστης να βλέπει 1 έως N γραμμές με 1.000.000 στήλες σε κάθε γραμμή.

 

Δεν νομίζω ότι υπάρχει ανθρώπινος εγκέφαλος ο οποίος μπορεί να κρατήσει πληροφορίες τέτοιου μεγέθους προσωρινά έτσι ώστε να σχηματίσει pattern και τελικά να έχει νόημα αυτό που βλέπει.

 

Για δεν μας λες το πρόβλημα ! Θα σκάσω !

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

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

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

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

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

Σύνδεση

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

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