Определить, когда строка редактируется в DataGrid - PullRequest
3 голосов
/ 22 декабря 2011

Я пытался зайти в Google, но не смог найти решение, которое подходит мне.

У меня есть DataGrid, который отображает некоторую информацию из таблицы SQL, о которой клиент не знает.Клиент просто отправляет запрос на сервер и получает список в качестве ответа, который затем отображается в DataGrid.

Мне нужно определить, когда пользователь вносит изменения в строку, и мне нужны новые значения, введенные пользователем.В настоящее время я использую событие RowEditEnding.И метод, который обрабатывает это событие, может:

private void editRowEventHandler(object sender, DataGridRowEditEndingEventArgs e)
{
    SomeClass sClass = e.Row.DataContext as SomeClass;
    // Send sClass to the server to be saved in the database...
}

Это дает мне строку, которая редактировалась.Но это дает мне строку перед изменениями, и я не могу понять, как получить строку после того, как изменения произошли.

Есть ли здесь кто-нибудь, кто знает, как я могу это сделать, или может указать мненаправление, в котором я мог бы узнать?

Ответы [ 2 ]

4 голосов
/ 20 января 2012

Смотрите обсуждение здесь , чтобы избежать считывания по ячейкам.

private void OnRowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
    DataGrid dataGrid = sender as DataGrid;
    if (e.EditAction == DataGridEditAction.Commit) {
        ListCollectionView view = CollectionViewSource.GetDefaultView(dataGrid.ItemsSource) as ListCollectionView;
        if (view.IsAddingNew || view.IsEditingItem) {
            this.Dispatcher.BeginInvoke(new DispatcherOperationCallback(param => 
            { 
                // This callback will be called after the CollectionView
                // has pushed the changes back to the DataGrid.ItemSource.

                // Write code here to save the data to the database.
                return null; 
            }), DispatcherPriority.Background, new object[] { null });
        }
    }
}
1 голос
/ 23 декабря 2011

В вашем случае вы пытаетесь обнаружить изменение объекта.Все сводится к свойствам SomeClass, поэтому вам нужно сосредоточиться на «Ячейке», а не на «Строке»

. Предполагая, что ваша сетка данных является resultGrid, я придумаю следующий код:

resultGrid.CellEditEnding += resultGrid_CellEditEnding;
void resultGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            var yourClassInstance = e.EditingElement.DataContext;
            var editingTextBox = e.EditingElement as TextBox;
            var newValue = editingTextBox.Text;
        }

«е» также содержит информацию о строке и столбце ячейки.Таким образом, вы будете знать, какой редактор использует ячейка.В этом случае я предполагаю, что это текстовое поле.Надеюсь, это поможет.

...