klapanaras Δημοσ. 20 Μαΐου 2008 Δημοσ. 20 Μαΐου 2008 Κατ'αρχάς καλημέρα σε όλους... α) Έχω φτίαξει μία φόρμα στην οποία αφού γίνουν οι κατάλληλες επιλογές πατάς το κουμπί καταχώρηση και σώζει τα στοιχεία σε μία βάση δεδομένων της Access. Για να αποφύγω πολλές εγγραφές αν ο χρήστης πατήσει κατα λάθος δύο φορές το κουμπί της καταχώρησης έχω βάλει να βγαίνει ένα popup που ενημερώνει πως καταχωρήθηκαν τα δεδομένα. Δεν μπορώ όμως με τίποτα να το κλειδώσω. Δηλαδή να μην μπορεί ο χρήστης να έχει access στην αρχική φόρμα χωρίς να πατήσει OK στο popoup. Καμιά ιδέα??? β) Τα combo boxes τα έχω κάνει να βγαίνουν με στυλ DropDownList ώστε να μην μπορεί ο χρήστης να γράψει τίποτα σε αυτά. Δίπλα από το καθένα έχω βάλει άλλα combo boxes για description των προηγούμενων και επέλεξα το στυλ standard. π.χ Με το που επιλέξει κάποιος κάτι στο ComboBox1, το ComboBox2 αυτόματα επιλέγει την αντίστοιχη περιγραφή. Υπάρχει κάποιος τρόπος να τα κλειδώσω και αυτά ωστέ να μην μπορεί ο χρήστης να γράψει κάτι εκεί μέσα??? Μπορεί να είναι τελείως ηλίθιες οι ερωτήσεις μου αλλά είμαι τελείως αρχάριος... Ευχαριστώ εκ των προταίρων!
k.tnb Δημοσ. 20 Μαΐου 2008 Δημοσ. 20 Μαΐου 2008 Από ότι κατάλαβα, (αν έχω δίκιο) δουλέυεις σε Visual Studio έτσι; Με φόρμες .aspx κτλ. Αν είναι έτσι τότε μπορείς να κάνεις τα παρακάτω: 1. Όσο αναφορά το ερώτημα β): Αν παίρνεις την περιγραφή από κάποια βάση ή έγγραφο τότε μπορείς να βάλεις δίπλα σε κάποιο dropDownList μια Label και να αλλάζεις σύμφωνα με την επιλογή του dropDownList το Text της Label --> Label.Text = κώδικας... Ή διαφορετικά, δίπλα στο dropDownList βάλε ένα textBox κάνε το multipleLines, μεγάλωσέ το όσο θες και κάνε το disabled. Σύμφωνα με την επιλογή του dropDownList αλλάζεις το Text του textBox --> TextBox1.Text = κώδικας... Με αυτόν τον τρόπο και θα έχεις το textBox που θέλεις και δε θα μπορεί κάποιος να γράψει σε αυτό επειδή είναι disabled. 2. Για το πρώτο σου ερώτημα: Από τη στιγμή που πατάει κάποιος το κουμπί για την υποβολή της φόρμας, με τη προυπόθεση οτι είναι επιτυχής η καταχώρηση μπορείς να ξεκινήσεις κάποιο Session με το οποίο πολύ απλά δε θα επιτρέπεις την είσοδο του χρήστη στη φόρμα καταχώρησης εαν αυτό είναι δεκτό από την εφαρμογή σου. Αν έχεις κάποια απορία πάνω σε αυτά που είπα ευχαρίστως να σου εξηγήσω.
random Δημοσ. 20 Μαΐου 2008 Δημοσ. 20 Μαΐου 2008 κατ' αρχην για καταχωρήσεις σε βάση, υπάρχουν και τα primary keys. με το ιδιο κλειδί δεν επιτρέπονται 2 καταχωρήσεις, οποτε η βαση ξερει να προστατευτεί απο τέτοια λάθη, ακόμα κι αν δεν βάλεις καμιά τέτοια δικλείδα στη φόρμα καταχώρησης. αλλα πες οτι θες να το κανεις πιο φιλικό το πρόγραμμα, και να προλαβαινεις αυτη την απόπειρα διπλής καταχώρησης πριν φτάσει στη βάση... Λεω, αντί δηλαδη, να ασχολήσαι με το αν ο χρήστης πατάει 2 φορές το κουμπάκι, να ελεγχεις αν αυτο που προσπαθεί να καταχωρήσει ειναι ήδη καταχωρημένο (αυτο κάνει μόνη της η βάση με το primary key, αλλα λέμε, αν δεν σ'αρέσουν τα PK, και θες να το κάνεις χειρονακτικά , δικό σου έλεγχο). πριν κανεις insert, να κανεις select, και αν υπάρχει ηδη το record στη βάση να μην κανεις τίποτα (ή για το σπάσιμο, να το λες στο χρήστη με popup ). Ετσι, την αγγαρεία, (να πατάνε το ΟΚ επιβεβαίωσης, μετα απο καταχώρηση) θα την φορτωθούν μονο εκεινοι οι χρήστες που πατάνε καταχωρηση 2 φορές, ενώ οι υπόλοιποι χρήστες , που το πατάνε, ορθά, μόνο μία, δεν θα ενοχλούνται απο τα Popup. -------------------------------------------------------- επιστρεφω στον δικο σου τρόπο: μολις ολοκληρώνεται η καταχώρηση, εμφανιζεις ενα msgbox με μοναδικό κουμπί το ΟΚ ; αυτο ειναι modal dialog ετσι; αν δεν το κλεισει δεν μπορει να επιστρεψει στη φορμα. (αν δεν ειναι modal, το κάνεις με τις κατάλληλες παραμέτρους κλήσης του popup). για να το κλεισει.. πρεπει να πατήσει το ΟΚ, ή το εικονιδιο [Χ] πάνω δεξιά (αν εχει τέτοιο). ειτε εμφανιζεις ενα dialog που να μην εχει [Χ], δεν ξερω αν γινεται στο .net κοιταξε τις περαμετρους κλήσης του popup. είτε κοιτάς τί value επιστρέφει το popup. με καθε τρόπο "κλεισίματος" επιστρεφει διαφορετικό value. άλλο με το ΟΚ, αλλο με το Cancel, to [X], κλπ. βάλε ενα IF, που να εκτελεί αυτά που κάνει με το ΟΚ, ανεξάρτητα του return value. b. αν το DropDownStyle το έχεις = DropDownList μπορει να διαλεξει μονο απο οσα εχει η λιστα, αν το εχεις =DropDown μπορει να πληκτρολογήσει και δικά του.
random Δημοσ. 20 Μαΐου 2008 Δημοσ. 20 Μαΐου 2008 μολις ειδα το ποστ του k.tnb. αν η φορμα ειναι aspx, μπορεις σε κωδικα javascript ή vbscript (εκτελειτε στον browser), με το πάτημα, πρώτα να γίνεται disabled το button, και μετα να ξεκινάει η διαδικασια insert στο server. οποτε θα πατιέται μονο μια φορά (μεχρι να ξαναφορτώσει τη σελίδα)
k.tnb Δημοσ. 20 Μαΐου 2008 Δημοσ. 20 Μαΐου 2008 Κατ' αρχάς random έχεις δίκιο για το popup, κάπως έτσι θα γίνει η δουλειά. Για το δεύτερο δε θα πρότεινα όμως client script γιατί αν το θέσει disabled όταν το φτιάχνει θα είναι disabled από την αρχή (ακόμα και πριν το Load της σελίδας επειδή έτσι χτίστηκε στο compile) δε θα χρειάζονται άλλες εκτελέσεις κώδικα. Με τα μικρά κομματάκια κώδικα που πρότεινα στο post θα φορτώνεται στο textBox ή στο label η περιγραφή που αντιστοιχεί στο επιλεγμένο στοιχείο του επίμαχου dropDownList χωρίς να έχει πρόσβαση κάποιος χρήστης εξ' ορισμού. Εξ' 'αλλου δε γίνεται κάποιος χρήστης να γράψει σε ένα label!!!! Φυσικά για να γίνει αυτό θα πρέπει η σελίδα να κάνει και PostBack στον εαυτό της με την αλλαγή του index του dropDownList (είναι μια οδιότητα του dropDownList και κάθε server control και αναφέρεται ως autoPostBack).
k.tnb Δημοσ. 20 Μαΐου 2008 Δημοσ. 20 Μαΐου 2008 Sorry random μπερδεύτηκα λίγο.... Το client script πάει στο κουμπί καταχώρησης των δεδομένων έτσι;; Για να μην μπορούν να το πατάνε δυο φορές;; Καλώς. Είπες να γίνεται disabled και βιάστικα νόμισα ενοούσες τα controls που θέλει να καταχωρεί τις περιγραφές.
klapanaras Δημοσ. 20 Μαΐου 2008 Μέλος Δημοσ. 20 Μαΐου 2008 Παιδιά 10000 ευχαριστώ για τις απαντήσεις σας... @k.tnb...Το έκανα τελικά με label και δούλεψε τέλεια!!! Thank u soooo much... επιστρεφω στον δικο σου τρόπο: μολις ολοκληρώνεται η καταχώρηση, εμφανιζεις ενα msgbox με μοναδικό κουμπί το ΟΚ ; αυτο ειναι modal dialog ετσι; αν δεν το κλεισει δεν μπορει να επιστρεψει στη φορμα. (αν δεν ειναι modal, το κάνεις με τις κατάλληλες παραμέτρους κλήσης του popup). για να το κλεισει.. πρεπει να πατήσει το ΟΚ, ή το εικονιδιο [Χ] πάνω δεξιά (αν εχει τέτοιο). Δεν ξέρω καν τι είναι το modal dialog... Πάντως είναι ακριβώς όπως το περιγράφεις... Κοίταξα στα properties του μήπως και μπορέσω να κάνω κάτι lock αλλά τζίφος... Και κάτι ακόμα που είχα ξεχάσει να ρωτήσω... γ) Όταν στα properties κάποιου combobox επιλέξω Sorted = True για να μου βάλει με αλφαβιτική σειρά τα δεδομένα μου βγάζει το παρακάτω μήνυμα: "ComboBox that has a DataSource set cannot be sorted. Sort the data using the underlying data model." Τι κάνουμε???
random Δημοσ. 20 Μαΐου 2008 Δημοσ. 20 Μαΐου 2008 sorry, στο 1ο μου μηνυμα σκεφτόμουν μια φόρμα τοπικά εκτελέσιμη για windows, ενα .exe μετα ειδα του k.tnb , οτι ισως φτιάχνεις aspx για web. στον browser το modal δεν ειναι απλή υπόθεση (αν γινεται). θα το αποφεύγαμε αν διευκρίνιζες για ποιό περιβάλλον γράφεις
klapanaras Δημοσ. 20 Μαΐου 2008 Μέλος Δημοσ. 20 Μαΐου 2008 sorry, στο 1ο μου μηνυμα σκεφτόμουν μια φόρμα τοπικά εκτελέσιμη για windows, ενα .exeμετα ειδα του k.tnb , οτι ισως φτιάχνεις aspx για web. στον browser το modal δεν ειναι απλή υπόθεση (αν γινεται). θα το αποφεύγαμε αν διευκρίνιζες για ποιό περιβάλλον γράφεις Soooooory....Έχεις απόλυτο δίκιο.... Λοιπόν το περιβάλλον είναι το Microsoft Visual Studio C#.... Επίσης στο πρώτο σου μήνυμα πολύ καλά σκεφτόσουν... Είναι ακριβώς αυτό που θέλω να κάνω...Αλλά πως???
NOTIOS1981 Δημοσ. 20 Μαΐου 2008 Δημοσ. 20 Μαΐου 2008 ΑΝ ΘΕΣ ΤΑ DATA ΣΤΟ COMBOBOX NA EINAI SORTED ΤΟΤΕ ΚΑΝΤΟ ΜΕΣΩ SQL QUERY ORDER BY (ΑΥΤΟ ΑΝ ΚΑΤΑΛΑΒΑ ΤΟ PROJECT ΣΟΥ) ΕΛΠΙΖΩ ΝΑ ΒΟΗΘΗΣΕΙ Παιδιά 10000 ευχαριστώ για τις απαντήσεις σας... @k.tnb...Το έκανα τελικά με label και δούλεψε τέλεια!!! Thank u soooo much... Δεν ξέρω καν τι είναι το modal dialog... Πάντως είναι ακριβώς όπως το περιγράφεις... Κοίταξα στα properties του μήπως και μπορέσω να κάνω κάτι lock αλλά τζίφος... Και κάτι ακόμα που είχα ξεχάσει να ρωτήσω... γ) Όταν στα properties κάποιου combobox επιλέξω Sorted = True για να μου βάλει με αλφαβιτική σειρά τα δεδομένα μου βγάζει το παρακάτω μήνυμα: "ComboBox that has a DataSource set cannot be sorted. Sort the data using the underlying data model." Τι κάνουμε???
random Δημοσ. 21 Μαΐου 2008 Δημοσ. 21 Μαΐου 2008 δεν ειμαι σιγουρος οτι καταλαβαινω modal ειναι ενα παράθυρο όταν μένει on top απο τα άλλα (της ίδιας εφαρμογής), και δεν μπορεις να γυρισεις στα αλλα που ειναι "πίσω" αν δεν το κλεισεις. τα popup οπως τα αποκαλείς. πχ. οταν γραφεις ενα κειμενο στο word και πατησεις το [Χ] για να κλείσει, σου πετάει ενα παράθυρο (dialog ή messagebox), με την ερώτηση "θελεις να σώσεις? yes / no / cancel" αυτό ειναι modal. δεν μπορεις να κανεις τίποτα στο word, αν δεν απαντήσεις στην ερώτηση. στη δική σου εφαρμογή, απ ότι λες... παταει ο χρήστης save, δειχνεις ενα μηνυμα "αποθηκευτηκε" και ενα κουμπί OK. λες , οτι ο χρηστης μπορει να γυρισει στη φόρμα και να συνεχίσει καταχωρήσεις, χωρις να απαντήσει στο ΟΚ ? πως γινεται αυτο;
klapanaras Δημοσ. 21 Μαΐου 2008 Μέλος Δημοσ. 21 Μαΐου 2008 Λοιπόν σε έχω μπερδέψει γιατί είμαι κι εγώ μπερδεμένος... Αυτό που έκανα είναι ότι ακριβώς περιγράφεις πιο πάνω... Έκανα μία καινούρια φόρμα που κάνει popup μόλις πατήσει ο χρήστης save... Έλα όμως που μπορεί να ξαναπατήσει όσες φορές θέλει save και το popup βγαίνει πάλι κάθε φορά... Το πως γίνεται αυτό δεν το έχω κταλάβει γιατί δεν ξέρω τι κάνω λάθος.... Ο κώδικας είναι αυτος: namespace Mine { public partial class popup : Form { public popup() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Close(); } private void popup_Load(object sender, EventArgs e) { } } }
bilco Δημοσ. 21 Μαΐου 2008 Δημοσ. 21 Μαΐου 2008 Είναι αυτό που λέει ο random. Πρέπει να το εμφανίσεις modal : popup.ShowDialog()
klapanaras Δημοσ. 21 Μαΐου 2008 Μέλος Δημοσ. 21 Μαΐου 2008 Είναι αυτό που λέει ο random. Πρέπει να το εμφανίσεις modal : popup.ShowDialog() Πρέπει να την προσθέσω κάπου αυτήν την γραμμή ή πρέπει να αντικαταστήσω κάποια άλλη με αυτή??? Γιατί κάτι δοκίμασα αλλά μου βγάζει errors...
bilco Δημοσ. 21 Μαΐου 2008 Δημοσ. 21 Μαΐου 2008 Πρέπει να την προσθέσω κάπου αυτήν την γραμμή ή πρέπει να αντικαταστήσω κάποια άλλη με αυτή??? Γιατί κάτι δοκίμασα αλλά μου βγάζει errors... Αντί για popup.Show() που υποθέτω ότι χρησιμοποιείς στον κώδικα που χειρίζεται το κλικ του κουμπιού save θα βάλεις popup.ShowDialog(). Ακόμα καλό είναι στο popup να ορίσεις ως AcceptButton ένα κουμπί που θα είναι το OK και CancelButton ένα άλλο για την ακύρωση ώστε να χρησιμοποιήσεις την ShowDialog όπως παρακάτω > if (popup.ShowDialog() == DialogResult.OK) { // και ότι είναι να κάνεις εδώ με το save }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.