我目前正在这样做:
private void dgResults_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
// Would be nice if we could do this on databind of each row instead and avoid looping
for (int r = 0; r < dgResults.Rows.Count; r++)
{
if (dgResults.Rows[r].Cells[5].Value.ToString() == "0")
{
for (int c = 0; c < dgResults.Rows[r].Cells.Count; c++)
{
dgResults.Rows[r].Cells[c].Style.ForeColor = Color.White;
}
}
}
}
但由于某种原因,它总是错过第一排。有更好的方法吗?
答案 0 :(得分:1)
由于某种原因,它总是错过了第一行
我不知道为什么(你的代码看似正确)。如果您想避免循环,可以使用CellFormatting
事件。
private void dgResults_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
{
if (dgResults.Rows[e.RowIndex].Cells[5].Value.ToString() == "0")
{
dgResults.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.ForeColor = Color.White;
}
}
答案 1 :(得分:1)
您不需要内部循环来为一行中的每个单元格设置样式,而是可以使用DefaultCellStyle.ForeColor
属性来设置整行的样式。
试试此代码
private void dgResults_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
// Would be nice if we could do this on databind of each row instead and avoid looping
for (DataGridViewRow row in dgResults.Rows)
{
if (row.Cells[5].Value.ToString() == "0")
{
row.DefaultCellStyle.ForeColor = Color.White;
}
}
}
答案 2 :(得分:0)
这是因为第一行被选中了。
public TransparentDataGridView()
{
this.SelectionChanged += TransparentDataGridView_SelectionChanged;
}
void TransparentDataGridView_SelectionChanged(object sender, EventArgs e)
{
ClearSelection();
}
修复它。
乔
答案 3 :(得分:0)
编辑:
try
{
foreach (DataGridViewRow dgvc in dgResults.Rows.Cast<DataGridViewRow>().Where(g => g.Cells[5].Value.ToString() == "0"))
{
dgvc.DefaultCellStyle.ForeColor = Color.White;
}
}
catch (Exception)
{
}