2014-10-02 3 views
1

사용자가 행을 추가 할 수있게 해주는 wpf DataGrid가 있습니다. 사용자가 데이터 행을 복사 할 수있는 기능을 추가해야하며 붙여 넣기시 새 행으로 추가됩니다. 나는 (Ctrl + C) 행을 복사 할 수 있지만 붙여 넣기 (Ctrl + V)를 누르면 모든 항목이 행의 첫 번째 셀에 붙여 넣어집니다. 행의 각 셀에 어떻게 붙여 넣을 수 있습니까?DataGrid 행을 복사하여 WPF 데이터 격자에 새 행을 붙여 넣으십시오.

<DataGrid Name="grdTest" HorizontalAlignment="Left" Grid.Row="0" Margin="5,5,0,0" VerticalAlignment="Top" Height="426" Width="1034" 
        AlternationCount="2" ItemsSource="{Binding TestsList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" > 
<DataGrid.Columns> 
<DataGridCheckBoxColumn Header="Is Active" Binding="{Binding Path=IsActive,Mode=TwoWay}"> 
    <DataGridTextColumn Width="90"> 
           <DataGridTextColumn.Binding> 
            <Binding Path="TestName" Mode="TwoWay"> 
             <Binding.ValidationRules> 
              <localVal:ValidationRules/> 
             </Binding.ValidationRules> 
            </Binding> 
           </DataGridTextColumn.Binding> 
           <DataGridTextColumn.Header> 
            <TextBlock Width="80" Text="Test Name" ToolTip=""/> 
           </DataGridTextColumn.Header> 
          </DataGridTextColumn> 

<DataGridTextColumn.Binding> 
            <Binding Path="TestType" Mode="TwoWay"> 
             <Binding.ValidationRules> 
              <localVal:ValidationRules/> 
             </Binding.ValidationRules> 
            </Binding> 
           </DataGridTextColumn.Binding> 
           <DataGridTextColumn.Header> 
            <TextBlock Width="80" Text="Test Type" ToolTip=""/> 
           </DataGridTextColumn.Header> 
          </DataGridTextColumn> 
</DataGrid.Columns> 
</DataGrid> 

이것은 내가 지금까지 가지고 무엇을 :

private void grdTest_CopyingRowClipboardContent(object sender, DataGridRowClipboardEventArgs e) 
     { 
      copiedItem = (Test)e.Item; 
     } 

private void grdTest_PreviewKeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.Key == Key.V && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
      { 

if (App.ViewModel.UpdatedListCommand.CanExecute(null)) 
       { 
        App.ViewModel.UpdatedListRowCommand.Execute(copiedItem); 
       } 

}}} 

나는 뷰 모델의 목록을 업데이트하고 NotifyProperty 변경 호출합니다. 목록이 업데이트되지만 UI에 반영되지 않습니다. 행 (복사/붙여 넣기 값)은 비어있는 것처럼 보이지만 셀을 선택하면 값이 나타납니다. 그래서 기본적으로 제대로 설정되지만 일부는 데이터 그리드에 표시되지 않습니다.

+0

안녕하세요, 그 해결책을 찾았습니까? 찾으면 대답으로 업데이트 해 주실 수 있습니까? 나는 또한 똑같은 문제에 대한 해결책을 찾고있다. 감사합니다 – batmaci

답변

0

필자는 Ctrl + C를 사용하여 행의 내용을 복사하고 붙여 넣을 때 사용하는 기능/이벤트를 재정의하고 새 데이터 그리드 행을 만들고 각 데이터를 오른쪽 셀에 삽입 해보십시오. 이게 도움이 되길 바란다.

+0

내가 대체 할 DataGrid의 이벤트는 무엇입니까? 또한 붙여 넣기인지 어떻게 알 수 있습니까? – perplexedDev

+0

DataGrid의 AddingNewItem 이벤트를 사용해보십시오. 샘플 코드가 없습니다. 죄송합니다. –

0

이 최선의 방법 인 경우 나도 몰라,하지만 난 데이터 그리드에 바인딩 된 ObservableCollection에에 복사 된 항목을 삽입하여 이런 짓을 :이 아니라, 완전히 새로운 행을 붙여 넣 것을

private void grdTest_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.V && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
    { 
     TestList.Insert(TestList.IndexOf((Test)grdTest.SelectedItem), copiedItem); 
    } 
} 

주 기존 빈 행을 채우는 것보다

관련 문제