Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
DataGrid: Direktes bearbeiten der "Cell"
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

DataGrid: Direktes bearbeiten der "Cell"

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers