Winforms Xtragrid选择已更改或替代

Winforms Xtragrid选择已更改或替代,winforms,devexpress,xtragrid,Winforms,Devexpress,Xtragrid,我这里有个问题 我在winforms中有一个XtraGrid,具有multiselect模式true,我需要验证我正在选择的行是否符合条件,如果符合条件,请选择它,如果不符合条件,请取消选择它。我目前使用的SelectionChanged方法如下: private void grdProducts_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) { try {

我这里有个问题

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

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;
    }
}
private void grd产品\u SelectionChanged(对象发送者,DevExpress.Data.SelectionChangedEventArgs e)
{
尝试
{
GridView视图=发送方作为GridView;
int[]selectedRows=view.GetSelectedRows();
for(int i=0;i
这里的问题是代码何时到达
视图.unelectrow(selectedRows[i])
line,再次调用
SelectionChanged
方法,程序发送多个
XtraMessageBox

有什么帮助吗?

您必须在代码前使用方法,在代码后使用方法。这将阻止引发
ColumnView.SelectionChanged
事件。
下面是一个例子:

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();        
}
private void grd产品\u SelectionChanged(对象发送者,DevExpress.Data.SelectionChangedEventArgs e)
{
var view=发送方作为GridView;
if(view==null)返回;
view.BeginSelection();
尝试
{
int[]selectedRows=view.GetSelectedRows();
for(int i=0;i