首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xtragrid SelectionChanged或替代

Xtragrid SelectionChanged或替代
EN

Stack Overflow用户
提问于 2015-04-16 22:24:49
回答 1查看 598关注 0票数 0

我在这里有个问题。

我在winforms中有一个具有多选择模式true的XtraGrid,我需要验证我所选择的行是否符合条件,如果不匹配,请选择它,如果不是,则取消选择它。我目前使用的SelectionChanged方法如下:

代码语言:javascript
运行
复制
private void grdProducts_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e)
{
    try
    {
        GridView view = sender as GridView;
        int[] selectedRows = view.GetSelectedRows();
        for (int i = 0; i < selectedRows.Length; i++)
        {
            if (view.IsRowSelected(selectedRows[i]))
            {
                Product product = view.GetRow(selectedRows[i]) as Candidato;
                ProcessStatus processStatus = _procesoStatusService.GetProduct(product.IdProduct);
                if (processStatus.Proccess.Inventory == (int)ProductInventory.Yes)
                {
                    view.UnselectRow(selectedRows[i]);
                    XtraMessageBox.Show("One or more products are currently in inventory.");
                }
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
}

这里的问题是,当代码到达view.UnselectRow(selectedRows[i]);行时,再次调用SelectionChanged方法,程序发送多个XtraMessageBox

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-17 02:13:41

您必须在代码之前使用BaseView.BeginSelection方法,在代码之后使用BaseView.EndSelection方法。这将防止引发ColumnView.SelectionChanged事件。

下面是一个例子:

代码语言:javascript
运行
复制
private void grdProducts_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e)
{
    var view = sender as GridView;
    if (view == null) return;
    view.BeginSelection();
    try
    {
        int[] selectedRows = view.GetSelectedRows();
        for (int i = 0; i < selectedRows.Length; i++)
        {
            if (view.IsRowSelected(selectedRows[i]))
            {
                Product product = view.GetRow(selectedRows[i]) as Candidato;
                ProcessStatus processStatus = _procesoStatusService.GetProduct(product.IdProduct);
                if (processStatus.Proccess.Inventory == (int)ProductInventory.Yes)
                {
                    view.UnselectRow(selectedRows[i]);
                    XtraMessageBox.Show("One or more products are currently in inventory.");
                }
            }
        }
    }
    catch (Exception)
    {
        view.EndSelection();
        throw;
    }
    view.EndSelection();        
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29687054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档