我有一个DataKridView,在3k左右有很多行。我需要根据具体的值制作不同颜色(3种颜色)的行。当我这样做时,2种颜色没有问题,如果有3种颜色就会出现问题。
滚动条在1.img中消失,当我向下滚动时再次出现。第二个问题是,当我双击DGV查看所选项目的详细信息时,应用程序没有响应。当有2种颜色时,不会出现任何问题
这是1.img
这是2种颜色的图像,因为你可以看到滚动条就在它的位置,当我双击时,没有“没有响应”
以下是我工作的代码:
private void CheckQuantity(DataGridViewRow dr)
{
var art = dr.DataBoundItem as DeArt;
if (art != null)
dr.DefaultCellStyle.BackColor = art.QuantityMin > art.QuantityRemaining ? Color.LightSalmon : Color.Empty;
}
private void CheckPVA(DataGridViewRow dr)
{
var art = dr.DataBoundItem as DeArt;
foreach (DeArtPVA v in PVAprice)
{
if (dr.DefaultCellStyle.BackColor == Color.LightSalmon && v.IdArt == art.Id)
{
dr.DefaultCellStyle.BackColor = Color.FromArgb(255, 120, 10);
break;
}
if (v.IdArt == art.Id)
dr.DefaultCellStyle.BackColor = Color.Yellow;
}
}
protected override void DGVWarehouse_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 0)
{
CheckQuantity(dgrDataGridView.Rows[e.RowIndex]);
CheckPVA(dgrDataGridView.Rows[e.RowIndex]);
}
}
任何想法为什么?
答案 0 :(得分:0)
在线上会有用吗?
private void DGVWarehouse_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
int colIndex = e.ColumnIndex;
int rowIndex = e.RowIndex;
if (colIndex == 0 && rowIndex >=0)
{
DataGridViewRow theRow = DGVWarehouse.Rows[rowIndex];
if (theRow.Cells[colIndex].Value.ToString() != String.Empty || theRow.Cells[colIndex].Value.ToString() != null)
{
if (theRow.Cells[colIndex].Value.ToString() == "YourArtID")
{
theRow.DefaultCellStyle.BackColor = Color.LightYellow;
}
else if (theRow.Cells[colIndex].Value.ToString() == "YourArtID")
{
theRow.DefaultCellStyle.BackColor = Color.LightGray;
}
else if (theRow.Cells[colIndex].Value.ToString() == "YourArtID")
{
theRow.DefaultCellStyle.BackColor = Color.Red;
}
else
{
// Your DEFAULT STYLE
}
}
}
}