2011-05-12 6 views
1

원하는대로 작동하는 WPF DataGrid가 있지만 각 행에 두 개의 셀을 편집 할 수 있습니다. 행을 편집 할 때이 두 행을 모두 편집 모드로 놓은 다음 행 편집이 끝나거나 행이 포커스를 잃을 때 업데이트를 실행 할 수 있습니까? 현재 각 셀을 편집 한 후 RowEditEnding이 실행되고 사용자는 커밋 후 UI가 다시 그리기를 기다려야합니다. 내가 사용하는 코드는 다음과 같습니다WPF DataGrid 전체 행 편집

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; 
      } 
     } 

답변

0

전체 행 편집의 기본 기능입니다. 셀 편집 당 업데이트가 실행되는 유일한 이유는 dg_cellEditEnding 메서드를 구현했기 때문입니다.

+0

그러나 모든 셀이 편집 모드로 들어 가지는 않습니다. 각 셀은 포커스를 받으면 CellEditingTemplate을 표시하지만 그 행의 나머지 셀에는 편집 할 수없는 표준 컨트롤이 있습니다. – Echilon

1

편집을 위해 DataGrid를 사용하지 않습니다. ListView를 사용하고 GridView를 제공 한 다음 ListView.View로 제공합니다. GridView 내부에서 CellTemplates를 사용하여 GridViewColumns를 만들 수 있습니다. 각 GridView 행의 마지막 열은 해당 행을 삭제하는 버튼입니다. 찾아보기 및 편집 모드를 지원하는 대신 편집 모드 만 지원합니다. 응용 프로그램은 더 유동적으로 움직이며 DataGrid 작업과 관련된 두통이 없습니다.