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