如何允许用户只删除datagrid中的新行

时间:2012-10-01 15:46:55

标签: c# wpf mvvm datagrid

我正在使用DataGrid向用户显示数据。

我允许用户编辑数据并添加新行。是否可以使用CanUserDeleteRows的内置功能来允许用户只删除他刚刚添加的行。

所以usecase-description:

1)用户打开datagrid 2)datagrid显示其内容 3)用户添加几行 4)用户删除其添加的行中的一个(或全部)。 5)用户能够删除初始加载时数据网格中的行

...所以只有“新”行应该能够被删除。这方面最好的方法是什么?我现在有点想法......

更新:要满足您的意见;)

我正在使用自定义类的ObservableCollection来填充数据网格。所以“问题”是我实际上并不知道如何在没有破坏mvvm模式的情况下“拦截”删除事件,也不知道怎么做。

2 个答案:

答案 0 :(得分:0)

您有两种选择:

1 `Disconnected Mode`

您在缓存中保存新行,使用GetChanges方法获取添加的行。

//GetChanges return added rows before update datasource from caching
var newRows = YourDataTable.GetChanges(DataRowState.Added);

您添加另一个数据列,每次添加新行时都会设置此列的值。

DataColumn columnFlag = new DataColumn("FlagDelete", typeof(bool));
根据列值

Delete Buttonvisible

2 `Connected Mode` 

您在数据库中创建新列,您实现服务器调用以获取数据,并根据列标志的值显示您的函数删除

答案 1 :(得分:0)

当我使用ObservableCollections等时,我使用了一种基于Aghilas Yakoub答案的工作方法。

我向DataGrid添加了一个Remove-Button,可见性绑定到IsNew - Property。

<DataGridTemplateColumn>
   <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
          <Button Content="Remove" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=DataContext.BottomDetailVM.DeleteCommand}" Visibility="{Binding IsNew, Converter={StaticResource Bool2VisibilityConverter}, FallbackValue=Collapsed}" CommandParameter="{Binding}" />
      </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

当usere单击按钮时,将使用当前对象(显示在行中)作为参数执行命令。

public ICommand DeleteRangfolgeCommand
{
  get
  {
     return new ActionCommand<MyOwnViewModel>(ExecuteDelete);
  }
}

private void ExecuteDelete(MyOwnViewModel viewModelToDelete)
{
    this.ItemsSourceList.Remove(viewModelToDelete);
}

顺便说一句:我正在使用来自MSDN-MagazineRelayCommand - 实现(在我的案例中称为ActionCommand)。