Winforms 在用户单击之前,是否仅设置第二行的单元格格式?

Winforms 在用户单击之前,是否仅设置第二行的单元格格式?,winforms,datagridview,Winforms,Datagridview,我使用了一些代码来激活一个红色和白色的单元格颜色,但由于某种原因,当用户单击该单元格时,它会正确触发,并根据同一行另一个单元格中的条件绘制两个单元格,其百分比为yeild。但出于某种原因,它只是痛苦的第一排,我不知道为什么 我在以下事件中使用此选项 私有void dgUpdatesPrices_CellFormatting(对象发送方, DataGridViewCellFormattingEventArgs(e) // 公共作废检查SPSTHREASHOLDS(双倍旧价、双倍新价、DataGri

我使用了一些代码来激活一个红色和白色的单元格颜色,但由于某种原因,当用户单击该单元格时,它会正确触发,并根据同一行另一个单元格中的条件绘制两个单元格,其百分比为yeild。但出于某种原因,它只是痛苦的第一排,我不知道为什么

我在以下事件中使用此选项

私有void dgUpdatesPrices_CellFormatting(对象发送方, DataGridViewCellFormattingEventArgs(e)

//
公共作废检查SPSTHREASHOLDS(双倍旧价、双倍新价、DataGridViewRow dgr)
{
foreach(dgUpdatePrices.Rows中的DataGridViewRow行)
{
如果(_priceListType==“SPS”)
{
Double _percentage=calculatePercentageDiff(_oldPrice,_newPrice);
dgr.Cells[“SPercentage”].Value=_percentage.ToString();
如果(_百分比>1.2)
{
ValidateProducts_validateProduct=新的ValidateProducts();
dgr.Cells[“NSPSPRICE”].Style.BackColor=Color.Red;
dgr.Cells[“NSPSPRICE”].Style.ForeColor=Color.White;
_validateProduct.ValidationMessage=“产品高于阈值,请调整。”;
if(dgr.Cells[“NSPSPRICE”].Value.ToStringOrEmpty()!=“”)
{
_validateProduct.price=Convert.ToDecimal(dgr.Cells[“NSPSPRICE”].Value);
}
_validateProduct.ValidationProduct=dgr.Cells[“Description”].Value.ToString();
_validatePrices.Add(_validateProduct);
}
如果(百分比<0.8)
{
ValidateProducts_validateProduct=新的ValidateProducts();
dgr.Cells[“NSPSPRICE”].Style.BackColor=Color.Red;
dgr.Cells[“NSPSPRICE”].Style.ForeColor=Color.White;
_validateProduct.ValidationMessage=“产品低于阈值,请调整。”;
if(dgr.Cells[“NSPSPRICE”].Value.ToStringOrEmpty()!=“”)
{
_validateProduct.price=Convert.ToDecimal(dgr.Cells[“NSPSPRICE”].Value);
}
_validateProduct.ValidationProduct=dgr.Cells[“Description”].Value.ToString();
_validatePrices.Add(_validateProduct);
}
如果(_百分比==0)
{
dgr.Cells[“NSPSPRICE”].Style.BackColor=Color.White;
dgr.Cells[“NSPSPRICE”].Style.ForeColor=Color.Black;
}
}
}
}
根据百分比列中的内容,它应该以新的sps价格绘制两个单元格。一旦用户单击上面的单元格“我是否缺少重新绘制功能”,它就会这样做


你应该看到,因为百分比列显示第一个百分比大于20,它的颜色现在应该与第二行相同,当我在第二个单元格中单击时,它绘制的很好,这是一个案例,整行选择可能会干扰。

感谢向上投票,有人不知道我如何阻止Hapenginit这可能是你遗漏了一些代码为了清楚起见,但是foreach(dgUpdatesPrices.Rows中的DataGridViewRow行)的要点是什么<代码>行从未使用过。您说您正在使用
CellFormatting
事件,但您正在设置特定单元格的
样式。这违背了事件的意图。当为
NSPSPRICE
列中的单元格触发事件时,应该设置
e.CellStyle
参数。我建议你读一读。谢谢你的支持投票,有没有人知道我如何从Hapenginit阻止这一点?可能是为了清晰起见,你省略了一些代码,但是foreach的
foreach(dgUpdatesPrices.Rows中的DataGridViewRow行)
<代码>行
从未使用过。您说您正在使用
CellFormatting
事件,但您正在设置特定单元格的
样式。这违背了事件的意图。当为
NSPSPRICE
列中的单元格触发事件时,应该设置
e.CellStyle
参数。我建议你读一读。
  /// </summary>
    public void checkSPSThreasholds(double _oldPrice, double _newPrice, DataGridViewRow dgr)
    {
        foreach (DataGridViewRow Row in dgUpdatesPrices.Rows)

        {
            if (_priceListType == "SPS")
            {
                Double _percentage = calculatePercentageDiff(_oldPrice, _newPrice);
                dgr.Cells["SPercentage"].Value = _percentage.ToString();

                if (_percentage > 1.2)
                {
                    ValidateProducts _validateProduct = new ValidateProducts();

                    dgr.Cells["NSPSPRICE"].Style.BackColor = Color.Red;
                    dgr.Cells["NSPSPRICE"].Style.ForeColor = Color.White;

                    _validateProduct.ValidationMessage = "Product is above threshold, please adjust.";
                    if (dgr.Cells["NSPSPRICE"].Value.ToStringOrEmpty() != "")
                    {
                        _validateProduct.price = Convert.ToDecimal(dgr.Cells["NSPSPRICE"].Value);
                    }
                    _validateProduct.ValidationProduct = dgr.Cells["Description"].Value.ToString();
                    _validatePrices.Add(_validateProduct);
                }

                if (_percentage < 0.8)
                {
                    ValidateProducts _validateProduct = new ValidateProducts();

                    dgr.Cells["NSPSPRICE"].Style.BackColor = Color.Red;
                    dgr.Cells["NSPSPRICE"].Style.ForeColor = Color.White;

                    _validateProduct.ValidationMessage = "Product is below threshold, please adjust.";
                    if (dgr.Cells["NSPSPRICE"].Value.ToStringOrEmpty() != "")
                    {
                        _validateProduct.price = Convert.ToDecimal(dgr.Cells["NSPSPRICE"].Value);
                    }
                    _validateProduct.ValidationProduct = dgr.Cells["Description"].Value.ToString();
                    _validatePrices.Add(_validateProduct);
                }

                if (_percentage == 0)
                {
                    dgr.Cells["NSPSPRICE"].Style.BackColor = Color.White;
                    dgr.Cells["NSPSPRICE"].Style.ForeColor = Color.Black;
                }
            }
        }
    }