Page 1 of 1

Zeile selektieren und in den Fokus bringen

Posted: 10.02.2014, 11:18
by eoe
Hallo Torsten,

ich habe eine Frage zur Selektion eine Zeile in einem Grid. Ich habe das grid aufgebaut und möchte eine bestimmte Zeile selektieren (mache ich an einem Objekt im Tag-Attribut fest). Die Zeile soll farblich hervorgehoben sein (wie bei einem Mausklick) und soll sichtbar sein. Wie kann ich das erreichen. Wenn ich eine Row auf Selected setze, passiert leider nichts von beiden Wünschen. Die Zeile ist zwar selektiert, aber ich kann es visuell anzeigen.

Grüße

Erik

public void SelektiereKnoten(IStrukturKnoten knoten)
{
if (Rows.Count > 1)
{
//Alle Positionen neu Nummerieren
for (int i = 1; i < Rows.Count; i++)
{
IStrukturKnoten tempknoten = Rows.Tag as IStrukturKnoten;
if (tempknoten != null && knoten == tempknoten)
{
Rows.Selected = true;
}
}
}
}

Re: Zeile selektieren und in den Fokus bringen

Posted: 10.02.2014, 14:03
by torsten
Hallo Erik
Schön von dir zu hören :-)
ich habe eine Frage zur Selektion eine Zeile in einem Grid. Ich habe das grid aufgebaut und möchte eine bestimmte Zeile selektieren
Ist doch einfach:

Code: Select all

grid.Selection.Clear();                        // alte Markierungen löschen
grid.FocusCell=  new Point (col,row);          // Fokuszelle setzen
// grid.Cells[col, row].Selected= true;        // Zelle markieren/selektieren
grid.Rows[row].Selected= true;                 // ...oder Zeile
grid.EnsureVisible(grid.Cells[col,row]);       // Zur Fokuszelle scrollen
Du musst zwischen Markierung und Fokuszelle unterscheiden:
  • - Die Markierung kann aus mehren Zellen bestehen und ist evtl. auch sichbar, wenn das Grid nicht den Fokus hat (siehe Eigenschaft grid.HideSelection)
    - Die Fokuszelle ist immer nur eine Zelle groß und immer unsichtbar, wenn das Grid den Fokus nicht hat.
Dein Quelltext scheint soweit ok. Nur das Löschen der alten Markierung fehlt. Ich unterscheide hier konsequent zwischen den
Markierungen, die der User durch Maus und Tastatur erzeugt und der Markierung, die durch dein Programm erzeugt wird.
Jede Markierung, die du durch dein Programm erzeugst, wird zu den Markierungen des User hinzugefügt. Die User-Markierung
kann aber explizit gelöscht werden (Eigenschaft: Selected oder Selection-Object)
Beachte außerdem: Die durch dein Programm erzeugen Markierungen halten sich nicht an die Einschränkungen
bezgl. "grid.SelectionMode" bzw. "grid.SelectionType". Hast du zum Beispiel "grid.SelectionType = ppsGrid.eSelectionType.Single"
eingestellt, kannst du trotzdem per Programm "grid.Rows[row].Selected= true" die gesamte Zeile markieren.

Ich hoffe, ich konnte dir helfen...
Gruß Torsten

Re: Zeile selektieren und in den Fokus bringen

Posted: 11.02.2014, 10:49
by torsten
Nachtrag:
Wenn die Markierungen nicht angezeigt werden, liegt das vielleicht auch daran, dass das Grid
nicht den Fokus besitzt. Erzeugst du das Ereignis "SelektiereKnoten" durch ein anderes Steuerelement?
Wenn das Grid die Markierungen auch anzeigen soll, wenn es nicht den Fokus besitzt, musst
du dies durch die Eigenschaft "grid.HideSelection" einstellen:

Code: Select all

grid.HideSelection = eHighlight.None;       // markierungen werden nie angezeigt
grid.HideSelection = eHighlight.Focused;    // ...werden angezeigt mit Fokus
grid.HideSelection = eHighlight.Always;     // ...werden immer angezeigt
Mmmhhh...: "HideSelection==eHighlight.Always" zeigt die Markierung immer an...(komisch)
Entweder stimmt die Doku nicht oder ich hatte beim Proggen ein Blackout :-)
Einfach mal die drei Einstellungen durchprobieren
Gruß Torsten

Re: Zeile selektieren und in den Fokus bringen

Posted: 19.02.2014, 12:04
by eoe
Hallo Torsten,

danke für die Tipps. Jetzt geht es wunderbar. Mit EnsureVisibility und dem Fokus auf das Grid ist alles gut...

Erik