对于未绑定的数据,请尝试 CellValueChanged,而不是 CellFormatting,对于绑定的数据集,请尝试 DataBindingComplete。例如,假设您正在使用以下 Button.Click 事件“删除/取消删除”一行:
private void Button1_Click(object sender, EventArgs e)
{
bool value = (bool)dataGridView1.CurrentRow.Cells["Deleted"].Value;
dataGridView1.CurrentRow.Cells["Deleted"].Value = !value;
// For bound data (like a DataTable) add the following line:
// ((DataTable)dataGridView1.DataSource).AcceptChanges();
}
未绑定数据
以这种方式更改“已删除”行的列值将触发以下事件处理程序。因此,您可以根据该列的值True 或False 为您的行着色:
private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["Deleted"].Index)
{
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = (bool)dataGridView1[e.ColumnIndex, e.RowIndex].Value ? Color.Red : Color.Black;
}
}
绑定数据
对于绑定数据,例如来自DataTable 的数据,处理DataBindingComplete 事件就足够了。此事件将在首次设置绑定以及更改之后触发 - 例如来自Button1.Click 事件的更改。在这里,您将遍历行并根据隐藏列的值设置所需的样式。 (请注意对具有DataTable 源的网格的Button1_Click 事件处理程序的额外更改。这是立即更改样式所必需的 - 否则在您导航到不同的行之前不会发生。)
private void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.DefaultSCellStyle.ForeColor = (bool)row.Cells["Deleted"].Value ? Color.Red : Color.Black;
}
}