WPF DataGrid Редактирование полной строки - PullRequest
1 голос
/ 12 мая 2011

У меня есть таблица данных WPF, которая работает для того, что я хочу, но в каждой строке есть две ячейки, которые можно редактировать. Можно ли перевести обе эти строки в режим редактирования при редактировании строки, а затем запустить обновление, когда редактирование строки заканчивается / строка теряет фокус? В настоящее время после редактирования каждой ячейки запускается RowEditEnding, и пользователь должен дождаться перерисовки пользовательского интерфейса после фиксации. Код, который я использую:

 private bool isManualEditCommit;
 private void dg_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
        {
            if(e.EditAction!= DataGridEditAction.Commit)
                return;
            var newProd = dgLists.SelectedItem as IProduct;
            if(newProd==null)
                return;
                    worker = new BackgroundWorker();
                    worker.DoWork += (s, dwe) =>
                    {
            ... commit update
                    };
                    worker.RunWorkerCompleted += (s, rwe) =>
                    {
                        ... refresh grid
                    };
                    worker.RunWorkerAsync();
        }
    /// <summary>
    /// Commits edits when a cell edit ends.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">The <see cref="System.Windows.Controls.DataGridCellEditEndingEventArgs"/> instance containing the event data.</param>
    private void dg_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) {
        if (e.EditAction == DataGridEditAction.Commit)
        {
            if (!isManualEditCommit)
            {
                isManualEditCommit = true;
                DataGrid grid = (DataGrid) sender;
                grid.CommitEdit(DataGridEditingUnit.Row, true);
                isManualEditCommit = false;
            }
        }

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Я перестал использовать DataGrid для редактирования. Я использую ListView, затем предоставляю, а затем предоставляю GridView в качестве ListView.View. Внутри GridView вы можете создавать GridViewColumns с CellTemplates. Последний столбец каждой строки GridView - это кнопка для удаления этой строки. Вместо поддержки режима просмотра и редактирования, я просто поддерживаю режим редактирования. Приложение движется более плавно, и у меня нет головной боли, связанной с работой с DataGrid.

0 голосов
/ 12 мая 2011

Полное редактирование строки является функциональностью по умолчанию. Единственная причина, по которой обновление запускается для каждой ячейки, заключается в том, что вы реализовали метод dg_cellEditEnding.

...