繁体   English   中英

从 devexpress gridcontrol 中删除多行

[英]Delete multiple rows from devexpress gridcontrol

我有一个 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])它会删除网格控件中的其他行,其行句柄与未过滤条件下的网格控件的行句柄相匹配。

我如何克服这个问题?

像这样包装你的代码。 它可以防止网格在您进行多次删除时更新其内部状态(包括过滤器)。

view.Grid.BeginDataUpdate();
//Delete multiple rows here
view.Grid.EndDataUpdate();
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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM