2014-10-02 89 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); 
    } 
} 

注意這貼了一個全新的行,而而不是填寫現有的空白行。

相關問題