Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Αλλαγή πλάτους στηλών σε φόρμα προβολής φύλλου δεδομένων (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/5786-allagi-platoys-stilon-se-forma-probolis-filloy-dedomenon.html)

dimitrisp 22-01-21 10:31

Αλλαγή πλάτους στηλών σε φόρμα προβολής φύλλου δεδομένων
 
Καλημέρα σε όλους!

Σε μια φόρμα σε λειτουργία προβολής φύλλου δεδομένων μάς δίνεται η δυνατότητα να αλλάξουμε τα πλάτη των στηλών.
Είναι δυνατόν, με κάποιο τρόπο, να κλειδωθεί η ενέργεια αυτή, έτσι ώστε:
1. Τα πλάτη τών στηλών να είναι παγωμένα για το χρήστη ή, τουλάχιστον,
2. Αν δεν μπορεί να κλειδωθούν, όταν γίνει αλλαγή του πλάτους, μετά το κλείσιμο του φύλλου δεδομένων,
να επανέρχονται στην αρχική τους κατάσταση?

Σας ευχαριστώ εκ των προτέρων

γιώργοςΚ 22-01-21 16:57

Καλησπέρα Δημήτρη,

Πρωτείνω στην εντολή με το ανοιγμα της φόρμας (On form Load) να βάλεις την εντολή
Me.Πεδίο που θέλεις.ColumnWidth= Οσο θες εσϋ (πχ. 10000)

dimitrisp 22-01-21 18:53

Καλησπέρα

Γιώργο, σε ευχαριστώ για την απάντηση.
Δεν φαίνεται άσχημη η λύση που προτείνεις.
Όμως, πρέπει να επαναλάβω τον Κώδικα και για τα (15) πεδία που έχει το φύλλο δεδομένων.
Και αυτό πρέπει να γίνει σε αρκετά φύλλα δεδομένων!


Μήπως έχεις καμιά ιδέα για πιο σύντομο Κώδικα, πιο "αυτοματοποιημένο"?
(αφού λάβεις δε υπόψη σου ότι τα πεδία δεν έχουν τα ίδια πλάτη)

tsgiannis 22-01-21 21:56

Μπορείς να κάνεις 1 iteration και να θέσεις το πλάτος "μαζικά" με 1 Loop
Σε πιο προχωρημένο επίπεδο μπορείς με κώδικα να διαβάσεις το πλάτος Χ εγγραφών (π.χ πρώτες 100 ή random) σε χαρακτήρες και με βάση το πιο πλατύ να θέσεις με μια σχετικά ασφάλεια το πλάτος ώστε να έχεις την καλύτερη δυνατή εκμετάλλευση.
Βέβαια υπάρχει και η λύση ActiveX (ListView) που υπάρχουν ρουτίνες για αυτόματη προσαρμογή μέσω Windows API αλλά φαντάζομαι δεν είναι ιδιαίτερα επιθυμητό.

dimitrisp 23-01-21 08:34

Καλημέρα σε όλους!

Γιάννη, αν δεν σου κάνει κόπο, μπορείς να ανεβάσεις ένα παράδειγμα?

tsgiannis 23-01-21 10:10

Έφτασε... :)
Κώδικας:

Private Sub Form_Load()
Dim ctl As Control
For Each ctl In Me.Detail.Controls
If ctl.ControlType = acTextBox Then
    ctl.ColumnWidth = 2000
End If
Next
End Sub


dimitrisp 23-01-21 13:27

Καλησπέρα

Γιάννη, καταρχάς σε ευχαριστώ για το παράδειγμα.
Απ` ότι βλέπω, ο κώδικας αυτός (δεν τον δοκίμασα ακόμη) επαναφέρει τα πεδία σε συγκεκριμένο πλάτος(ColumnWidth = 2000)

Όμως, το ζητούμενο δεν είναι ακριβώς αυτό!
Με απλά λόγια: Ανοίγει ο χρήστης το φύλλο δεδομένων. Για τους δικούς του λόγους, τροποποιεί το πλάτος κάποιου(ων) πεδίου (ων).

Κατόπιν, μετά το κλείσιμο και το εκ νέου άνοιγμα του φύλλο δεδομένων τα αλλαγμένα πεδία να επανέρχονται στην προεπιλεγμένη(αρχική) κατάσταση!
Αυτό είναι το ζητούμενο!

tsgiannis 23-01-21 17:35

Αυτό δεν το πρόσεξα...αλλα η λύση δεν είναι δύσκολη
Θα φτιάξεις 1 πίνακα που θα κρατάει για κάθε χρήστη τις προτιμήσεις(πίνακας,πεδίο, λάτος) , (κάπου χρειάζεσαι 1 κουμπάκι λογικά στο ribbon που θα ανιχνεύει τα πλάτη και θα τα αποθηκεύει)
Στο Load θα διαβάζει αυτές τις τιμές και θα τις εφαρμόζει

vraxnakisg 24-01-21 11:17

1 Συνημμένο(α)
Καλημέρα σε όλη την παρέα,

Δείτε μια πρόταση για το ζητούμενο.

Απαραίτητη προϋπόθεση για δουλέψει σωστά θα πρέπει να υπάρχει είσοδος χρήστη στην εκάστοτε εφαρμογή. Έτσι ώστε να ελέγχουμε αν έχει δικαίωμα αποθήκευσης ο χρήστης των αλλαγών στο πλάτος των στηλών σε μια φόρμα.

Στο παράδειγμα όταν ο χρήστης είναι ο admin μπορεί να αλλάξει το πλάτος των στηλών και με το κλείσιμο της φόρμας «frmMain» να αποθηκεύει την διαμόρφωση των στηλών.

Όταν συνδεθεί κάποιος άλλος χρήστης μπορεί να αλλάξει το πλάτος των στηλών, αλλά όταν κλείσει την φόρμα δεν θα αποθηκεύσει τις αλλαγές που έκανε. Ανοίγοντας πάλι την φόρμα «frmMain» θα έχει την μορφοποίηση που είχε κάνει ο χρήστης Admin.

Ευχαριστώ.

dimitrisp 24-01-21 20:25

Καλησπέρα σε όλους!

Γιώργο, καταπληκτική ιδέα, για το ζητούμενο! Ακριβώς αυτό έψαχνα...

Θερμές ευχαριστίες.
Καλή συνέχεια...

dimitrisp 25-01-21 19:25

Καλησπέρα

Γιώργο, στο παράδειγμα που ανέβασες είδα ότι ο κώδικας ισχύει μόνο για συγκεκριμένο φύλλο δεδομένων(frmMain).
Αν προσθέσουμε νέα φύλλα δεδομένων θα πρέπει να ενσωματώσουμε και σε αυτά τον ίδιο κώδικα κοκ.,
για να έχουμε το επιθυμητό αποτέλεσμα.

Προσπάθησα με μια Public να το γενικεύσω, αλλά μου χτυπάει στο "For Each ctrl In Me.Controls".

Έχεις καμιά ιδέα πώς μπορούμε να το χειριστούμε πιο γενικευμένα με καμιά Function?

pctechdr 25-01-21 20:27

Χωρίς να έχω διαβάσει τον κώδικα ούτε έχω κατεβάσει το παράδειγμα το me θα μπορούσες να το αντικαταστήσεις με το screen active form

https://docs.microsoft.com/en-us/off...een.activeform

vraxnakisg 25-01-21 21:59

1 Συνημμένο(α)
Καλησπερα σας,

Δες μια προταση.

Ευχαριστω.

tsgiannis 26-01-21 11:41

1 Συνημμένο(α)
Με βάση την προηγούμενη πρόταση μου βάζω 1 quick & dirty attachment
Για να το κάνεις δυναμικό θα πρέπει να περνάς σαν όρισμα την form
e.g
Public Function AdjustColumns(Frm as Form)
Ρίξε μια ματιά

dimitrisp 26-01-21 17:10

Καλησπέρα σε όλους!

Γιώργο, η πρότασή σου είναι υποδειγματική και με εξυπηρετεί απόλυτα!

Γιάννη, η πρότασή σου φαίνεται να είναι άκρως ενδιαφέρουσα. Θα τη μελετήσω,
και αν χρειαστεί θα επανέλθω.

Σας υπερευχαριστώ. Είμαι ειλικρινά υπόχρεος για τη βοήθειά σας!

Καλή συνέχεια...


Η ώρα είναι 14:30.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2