从devexpress gridcontrol中删除多行

时间:2015-05-04 20:53:37

标签: c# wpf devexpress

我有一个wpf应用程序,其中一个用户控件使用devexpress网格控件。我已经授予用户选择特定行的功能,并通过处理下面代码中提到的keydown事件来删除它:

private void m_gridA_KeyDown(object sender, KeyEventArgs e)
{
    Tableview view = sender as Tableview;
    if(e.Key == Key.Delete)
    {
        IList<GridCell> celllist = null;
        celllist = (sender as TableView).GetSelectedCells();
        if(cellist.Count < 10)
            return;
        view.DeleteRow(view.FocusedRowHandle)
    }
}

当用户选择单行时,这非常适用。但是,如果用户需要同时删除多行,如何实现相同的功能。

这是我尝试过的方法:

int[] rows = m_gridA.GetSelectedRowHandles();

然后遍历每个行句柄并删除它们。我面临的这种方法的问题是,在我的应用程序中,网格控件中有很多数据。因此,为了理解数据,使用网格控制过滤器编辑器进行了大量过滤。因此,函数GetSelectedRowHandles返回当前筛选视图中选定且可见的行句柄。因此,当我调用view.DeleteRow(row[i])时,它会删除网格控件中的其他行,这些行的行处理与未经过滤的条件中的网格控件的行匹配。

我如何克服这个问题?

2 个答案:

答案 0 :(得分:0)

像这样包裹你的代码。当您进行多次删除时,它会阻止网格更新其内部状态(包括过滤器)。

view.Grid.BeginDataUpdate();
//Delete multiple rows here
view.Grid.EndDataUpdate();

答案 1 :(得分:-1)

gridView1.BeginUpdate();
Int32[] selectedRowHandles = gridView1.GetSelectedRows();
int t = -1;
foreach(var item in selectedRowHandles) {

    if(item >= 0 && t == -1)
        t = item;
    if(t >= 0)
        gridView1.DeleteRow(t);

}
gridView1.EndUpdate();