2014-10-02 142 views
1

我有一个允许用户添加行的wpf数据网格。我需要添加一个功能,用户可以在其中复制数据行,并在粘贴时将其添加为新行。我可以复制(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改变。该列表已更新,但是,它不会反映在用户界面中。该行(我复制/粘贴值)似乎是空的,但是当我选择一个单元格时,该值出现。所以基本上它被正确设置,但一些不显示在数据网格中。

+0

嗨,你找到了解决方案吗?如果你发现,你可以请更新作为答案。我也在寻找完全相同问题的解决方案。谢谢 – batmaci 2015-03-05 14:44:11

回答

0

我想用Ctrl + C复制行的内容,尝试覆盖粘贴时使用的函数/事件,并创建一个新的数据网格行并将每个数据插入到右侧单元格。我希望这有帮助。

+0

我重写了哪个datagrid事件?另外我怎么知道它是否粘贴? – perplexedDev 2014-10-02 20:28:03

+0

尝试使用DataGrid的AddingNewItem事件,我没有示例代码给你,很抱歉。 – 2014-10-02 23:06:58

0

我不知道这是不是最好的方式,但我通过插入复制的项目到绑定到DataGrid中的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); 
    } 
} 

注意这贴了一个全新的行,而而不是填写现有的空白行。

相关问题