Laden...

DataGrid: Direktes bearbeiten der "Cell"

Erstellt von reloop vor 13 Jahren Letzter Beitrag vor 13 Jahren 836 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren
DataGrid: Direktes bearbeiten der "Cell"

Hallo,

ich habe eine Anwendung wo der Kunde über ein WPF-DataGrid zu einem bestimmten Vorgang beliebig viele Mitarbeiter hinzufügen kann.

Dazu habe ich ein eigenes ComboBox-Control entworfen, welches im DataGrid eingebunden ist. (DataGridTemplateColumn->CellTemplate->DataTemplate).

Da bei jedem Vorgang unterschiedlich viele Mitarbeiter hinzugefügt werden können, habe ich die Eigenschaft CanUserAddRows auf "True" gesetzt.

Nun habe ich aber folgendes Problem:

Wenn der Kunde nun in dieser, ich nenne sie mal "autogenerierten"-Row, den Inhalt der Combobox verändert und dann in die nächste Spalte vom Grid klickt, wird der vorherige Wert in der Combobox verworfen.

Laienhaft Ausgedrückt: Ich habe das Gefühl, dass das DataGrid die Zeile erst beim Doppelklick initialisiert und für Eingaben "bereit" macht. Denn wenn ich erst in eine Spalte Doppelklcike (von der "autogenerierten"-Row) und dann in die Combobox wechsle und einen Wert auswähle, funktioniert alles wunderbar.

Ich hoffe, ihr könnt nachvollziehen worum es geht und meine Beschreibung war nicht all zu verwirrend.

Mit freundlichen Grüßen,
reloop

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

Hallo,

habe eine, in meinen Augen noch nicht ganz so glückliche, Lösung gefunden:

Im Event: CurrentCellChanged:

 private void GridCurrentCellChanged(object sender, EventArgs e)
        {
            var currentGrid = sender as DataGrid;


            if (currentGrid != null)
            {
                if (currentGrid.CurrentCell.Column == null) return;

                currentGrid.CommitEdit();
                if (currentGrid.CurrentCell.Column.Header.ToString() == "")
                {
                    currentGrid.CancelEdit();
                    return;
                }

                currentGrid.BeginEdit();
            }

            var focusedCell = Keyboard.FocusedElement as DataGridCell;
            if (focusedCell == null) return;

            var traversal = new TraversalRequest(FocusNavigationDirection.Next);
            focusedCell.MoveFocus(traversal);
        }

Somit landet man direkt im Bearbeiten.