| |
Fragen & Antworten rund um sev-KomponentensevDataGrid3 und .CellLeft(nCol) nach ColumnReorder | | | Autor: Woellmi | Datum: 27.10.16 21:14 |
| Hallo Dieter,
ich arbeite mit dem sevDataGrid3 im ListMode und erlaube
mittels
oGrid.AllowColumnReorder=TRUE dass der Anwender die Spalten neu anordnen kann.
Z.B. die 3. Spalte an die Position 1 ziehen.
Wenn ich nun eigene Eingabemasken über das Grid lege, nutze ich
oGrid.CellLeft(nCol) um mein EingabeControl an die korrekte Position über das Grid zu legen.
With oGRD
If .RowIsVisible(nRow) Then
oTBOX.Width = .Columns(nCol).Width
oTBOX.Height = .RowHeight
oTBOX.Move .CellLeft(nCol) - f_nGetSevGRD3FixColsOffset(oGRD) + XOffset, _
.CellTop(nRow, nCol) + YOffset
End If
End With Das funktioniert alles prima, solange die Spalten nicht verschoben wurden.
Nachdem ich die Spalten verschoben habe und z.B. die Spalte 1 an die Position
4 verschoben habe und mein Eingabefeld über die "neue" Spalte 1 platzieren will:
nCol=1 ==> .CellLeft(nCol) 'die "1" wird natürlich als Parameter übergeben ;-)
With oGRD
If .RowIsVisible(nRow) Then
oTBOX.Width = .Columns(1).Width
oTBOX.Height = .RowHeight
oTBOX.Move .CellLeft(1) - f_nGetSevGRD3FixColsOffset(oGRD) + XOffset, _
.CellTop(nRow, 1) + YOffset
End If
End With dann gibt ".CellLeft(nCol)" die Position der "alten Spalte 1, nun also Spalte 4
zurück. Mein Eingabefeld liegt genau über der Zelle in der Neuen Spalte 4,
die davor Spalte 1 war.
D.h. es sieht so aus, dass die ursprünglische Spalte beim Verschieben mitwandert und
nicht neu vergeben wird.
Ist dies so gewollt?
Wenn ja, wie ist es möglich die Col-Eigenschaft der neuen ersten Spalte zu ermitteln,
oder eine Neunummerierung zu veranlassen?
Ich hoffe mich verständlich ausgedrückt zu haben
Meine Absicht ist es in einem speziellen Eingabemodus einen Referenzwert
immer an der ersten Spalte einzugeben. Dieser wird dann in alle anderen Spalten (Rechts von der ersten) übernommen.
Dazu kann der Anwender aus einer Vielzahl von verfügbaren Spalten eine auswählen und an
die erste (Linke) Position verschieben. (=> wegen der Übersicht)
Wird nun der spezielle Eingabemodus, nicht über DoppelKlick auf die betreffende Zelle, sondern
über Tastenkürzel aktiviert, gebe ich die absolute Spalte, also eine "1" an.
Dann wird die Eingabemaske der gewählten Zeile immer an der "Linken" also der ersten sichtbaren
Spalte angezeigt.
Wie gesagt vor dem Spaltenverschieben kein Problem! Mit dem Verschieben wandert die
Col-Eigenschaft mit der verschobene Spalte mit. (????)
Vielen Dank schon jetzt.
In der Hilfe habe ich leider nichts passendes gefunden.
Tschaui
Woellmi | |
Re: sevDataGrid3 und .CellLeft(nCol) nach ColumnReorder | | | Autor: Woellmi | Datum: 28.10.16 11:56 |
| Hi Dieter,
ja, Du hast nat. grundsätzlich recht. Darum habe ich ja auch geschrieben:
".. eine für mich nützliche Funktion.."
In meinem Programm kann keine Spalte "unsichtbar" geschalten werden.
Löschen ist zwar vorgesehen, aber dann wird ja neu angeordnet und somit
existiert jede Position von {1 .. ".Cols"}, nur eben weniger als zuvor.
Weiterhin wird diese Abfrage grundsätzlich nur im Kontext verwendet.
D.h. um dahin zu kommen, ist sichergestellt, dass überhaupt min. 2 Spalten
existieren und diese auch sichtbar sind.
Aber grundsätzlich hast Du natürlich recht. Eine ohne Bedingungen universal
verwendbare Funktion müsste dies berücksichtigen. Nur habe ich für mein Prog.
befunden, dass es an dieser Stelle nicht erforderlich ist auf Sichtbarkeit zu prüfen.
z.B. mitif po_Grid.Columns(po_Grid.Columns(nIdx).Position).Visible Then Denn dann müsste ja ein weiterer Durchlauf die nächste sichtbare Spalte suchen.
Und dies ist bei "mir" nicht erforderlich.
Aber, ich werde sehen dies so umzuändern, dass zukünftig auch dies berücksichtigt wird.
Aber danke für den Hinweis. Ich freue mich über jeden Hinweis, der meinen Code stabiler
macht, zumal mir dies zeigt, dass tatsächlich jemand mitdenkt.
Und dies ist heute leider nicht mehr selbstverständlich.
Bei dem "DeadLine-Stress" bleibt in der Hektik leider die Qualität oft auf der Strecke
und eine spätere Nacharbeit ist selten möglich.
Also Hut ab, es macht Spaß hier "geholfen zu werden"
Schönen Tag noch
Tschaui
Woellmi | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|