【问题标题】:How to allow user to delete only new rows in datagrid如何允许用户仅删除数据网格中的新行
【发布时间】:2012-10-01 15:46:54
【问题描述】:

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

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

所以用例描述:

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

...所以只有“新”行才能被删除。什么方法在这里最好?我现在有点想不通...

更新:为了满足您的 cmets ;)

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

【问题讨论】:

  • 您使用什么数据类型来绑定 DataGrid?如果 DataTable 则 DataRow 具有已添加状态,如果在 DataTable 中添加了新行。

标签: c# wpf mvvm datagrid


【解决方案1】:

你有两个选择:

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` 

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

【讨论】:

    【解决方案2】:

    当我使用 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>
    

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

    public ICommand DeleteRangfolgeCommand
    {
      get
      {
         return new ActionCommand<MyOwnViewModel>(ExecuteDelete);
      }
    }
    
    private void ExecuteDelete(MyOwnViewModel viewModelToDelete)
    {
        this.ItemsSourceList.Remove(viewModelToDelete);
    }
    

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

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多