censOred Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Χαιρετώ όλους τους coders, Καινούριος στην C# και στο Visual Studio.Φτιάχνω μια εφαρμογή σε Winforms και έχω κολλήσει. Θέλω να φτιάξω ένα control ώστε να μπορεί να αναπαριστά μέχρι και ένα εκατομμύριο στήλες. έχω καταφέρει μέχρι στιγμής να φτιάξω αντίστοιχο control το οποιο αναπαριστά αρκετά γρήγορα 1 εκατομμυριο γραμμές κάνοντας extend μια <listview>. Όταν όμως πάω να φτιάξω κάτι αντίστοιχο για στήλες μπορώ να εμφανίσω γρήγορα το πολύ μέχρι 1000 στοιχεία. Το datagridview control δεν μου κάνει καθώς μπορεί να εμφανίσει μέχρι 65535 στήλες. Η listview θεωρητικά δεν θα έπρεπε να έχει κάποιο πρόβλημα, αλλά πάνω από 1000 στήλες αρνείται πεισματικά να φτιάξει. Δεν θέλω να καταλήξω να αγοράσω κάποιο control αρα ψάχνω για κάποια ιδέα/κατεύθυνση ώστε να ξεπεράσω το πρόβλημα μου.
censOred Δημοσ. 7 Δεκεμβρίου 2012 Μέλος Δημοσ. 7 Δεκεμβρίου 2012 Δεν θέλω να φτιάξω 1 εκατομύριο γραμμές. Θέλω να υπάρχουν μόνο οι headers για αυτές τις γραμμές και όταν χρείαζεται θα τραβάω από μια βάση τα αντίστοιχα στοιχεία για να φτιαχτούν οι γραμμές που θέλω και να εμφανιστούν στην φόρμα μου οι αντιστοιχες γραμμές και στηλες. Το ίδιο θέλω να πετύχω και όσον αφορά τις στήλες,μόνο τα headers να υπάρχουν. Έχεις καμιά ιδέα?
albNik Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 ListView se virtual mode. Καμιά καθυστέρηση > List<string> lines = new List<string>(); public Form1() { InitializeComponent(); int size = 1000000; for(int i = 0; i < size; i++) lines.Add("this is line nr " + i); listView1.Columns.Add("colunm"); listView1.VirtualMode = true; listView1.VirtualListSize = size; listView1.RetrieveVirtualItem += listView1_RetrieveVirtualItem; } private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { e.Item =new ListViewItem(lines[e.ItemIndex]); } 1000000 στήλες ... ή γραμμές???
defacer Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Οπωσδήποτε σε virtualized mode ο,τι κάνεις, όπως λέει ο albNik. Όμως αν δεν έχεις κάποιο έτοιμο control που να σε καλύπτει το να το γράψεις μόνος σου θα είναι 100% αδύνατον δεδομένου ότι είσαι νέος. Πάντως δεν είμαι σίγουρος αν καταλάβαμε τι προσπαθείς να κάνεις. Ένα screenshot (πειραγμένο αν χρειάζεται) θα βοηθούσε.
censOred Δημοσ. 7 Δεκεμβρίου 2012 Μέλος Δημοσ. 7 Δεκεμβρίου 2012 Θέλω για στήλες. Αυτο που μου ποστάρεις είναι για γραμμές σωστά? Τις 1.000.000 γραμμές και εγω με virtual mode τα κατάφερα. Αλλα στις στήλες εχω πρόβλημα.Βάζω να μου εμφανίσει 1000 column headers και αυτό αδυνατεί και μου εμφανίζει 505 (για καποιον λόγο) στήλες. Το 1.000.000 είναι ενδεικτικό.αρχικά δεν θα δουλέψω με τέτοια μεγέθη αλλά θέλω να είναι ανεξάρτητο από το μέγεθος αυτό που θα κάνω για να μην αντιμετωπίσω πρόβλημα μετά καθώς πιστεύω θα φτάσω σε τέτοια νούμερα.
παπι Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Τωρα το πας καλυτερα. Το κλειδι ειναι να δειξεις στον χρηστη αυτα που μπορει να επεξεργαστει 17:21 Παιδες, κυριακη κληρωνει το τζοκερ. φτου ρε γαμοτο χαλασε το 3πλο 17:21 με το edit...
censOred Δημοσ. 7 Δεκεμβρίου 2012 Μέλος Δημοσ. 7 Δεκεμβρίου 2012 Θέλω κάτι τέτοιο να κάνω.Με τα columns όμως περιορίζομαι στο μέγεθος και παραξενεύομαι,γιατί ουσιαστικά μόνο ο προσανατολισμός της λίστας αλλάζει (φαντάζομαι). Και θέλω να συνδέσω μετά τα scrollbars με τα headers και το grid μου. Υπάρχει φως στο τούνελ? Δεν με πειράζει να λιώσω στον κωδικα απλά θέλω να ξέρω αν είναι εφικτό σε winforms αυτό και καμιά ιδέα για να ξεκολλήσω. Δεν παίζω τυχερά παιχνίδια.Μόνο στοίχημα Και είμαι και παρανομος πια,οντας ιντερνετικός
albNik Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Αφού έχεις ξεχωριστά scrolls κράτα ένα μικρο listview(π.χ. 20x10) listview και άλλαζε το περιεχόμενο του σε κάθε scroll event. 1
censOred Δημοσ. 7 Δεκεμβρίου 2012 Μέλος Δημοσ. 7 Δεκεμβρίου 2012 Και με αυτό τον τρόπο δεν μπορώ να δμιουργήσω περισσοτερες από 65000 στηλες με τους τρόπους που ήδη γνωρίζω. Αυτό είναι το πρόβλημα που θέλω να ξεπεράσω.
albNik Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Γιατι <65000? Τα VScrollBar, HScrollBar μπορούν να δεχτούν οποιοδήποτε int(int.MaxValue<2^31) για Value. Πάντως δε νομίζω να έχεις 10^6*10^6 (=1 τρισ) δεδομένα. Ακόμα και 1 byte το καθένα να είναι θες 1ΤΒ σκληρό δίσκο.
defacer Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Βασικά μήπως πρέπει να ξανασκεφτείς τι πας να κάνεις; Τι νόημα έχει να δείχνεις ένα δισεκατομμύριο στήλες; Κανένας άνθρωπος δε θα μπορεί να κάνει κάτι χρήσιμο με ένα τέτοιο πίνακα. Δηλαδή αν θέλω να δω τη στήλη #34532453 τι θα πρέπει να κάνω; Η αν θέλω να δω τη στήλη "κωλοτούμπες" αλλά δεν ξέρω σε ποιά θέση βρίσκεται;
censOred Δημοσ. 7 Δεκεμβρίου 2012 Μέλος Δημοσ. 7 Δεκεμβρίου 2012 Μπορείς να μου πεις πως να γεμίσω 10000 στήλες σε μια listview και μόνο μία σειρά σε virtual mode? @Defacer Μα δεν θα τις δείχνω όλες.Θέλω απλά να είναι διαθέσιμα τα 1.000.000 headers μου (τα οποία δεν θα πιάνουν τόσο χώρο στην μνήμη) και ανάλογα σε ποιο θα σκρολάρω τότε θα εμφανίζονται αυτά όπως και οι τιμές στο πλέγμα μου.
migf1 Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Βασικά μήπως πρέπει να ξανασκεφτείς τι πας να κάνεις; Τι νόημα έχει να δείχνεις ένα δισεκατομμύριο στήλες; Κανένας άνθρωπος δε θα μπορεί να κάνει κάτι χρήσιμο με ένα τέτοιο πίνακα. Δηλαδή αν θέλω να δω τη στήλη #34532453 τι θα πρέπει να κάνω; Search->Goto Col->34532453 Η αν θέλω να δω τη στήλη "κωλοτούμπες" αλλά δεν ξέρω σε ποιά θέση βρίσκεται; Αν είναι hashed οι στήλες, θα μπορούσες να αρχίσεις να γράφεις τα γράμματα της λέξης από την αρχή και να σου κάνει auto-move
albNik Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Όντος και σε μένα σταματάει κάπου για Columns>500+. Με εξωτερικό HScrollBar και listview με 10 columns > hScrollBar1.MaximumSize = 10000; private void hScrollBar1_Scroll(object sender, ScrollEventArgs e) { for(int i = 0; i < 10; i++) listView1.Columns[i].Text = "col:" +( e.NewValue + i); } Αλλά δεν μπορείς να έχεις όλες τις στάνταρτ λειτουργίες του ListView
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα