有没有办法根据用户看不到的列中的某些值来设置行的样式?网格包含几行,如果删除它们,我希望某些行以红色着色。我有一个隐藏列,如果列被删除则存储true,否则为false。我已尝试CellFormatting
,但由于我的列不可见,e.ColumnIndex
永远不会为我的隐藏列提供正确的值。
非常感谢任何帮助。
修改
下面是我想要完成的图片。您可以看到第二行的文本为红色,这是由于用户在数据网格中无法看到的列中的值。当用户第一次看到表格时(加载时),该网格应该是这样的。
答案 0 :(得分:0)
根据我的理解,当列是DataGridView中的不可见列时,您希望获得列的值。
是不是?如果我错了,请纠正我。
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = CreateDataTable();
dataGridView1.Columns["ID"].Visible = false; // Set the ID column invisible.
MessageBox.Show(dataGridView1.Rows[2].Cells["ID"].Value.ToString()); // Get the ID column value.
}
答案 1 :(得分:0)
而不是CellFormatting
,请尝试CellValueChanged
表示未绑定数据,或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
事件的更改。在这里,您将遍历行并根据隐藏列的值设置所需的样式。 (请注意Button1_Click
事件处理程序对具有DataTable
源的网格的额外更改。这需要立即更改样式 - 否则在您导航之前不会发生到另一行。)
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;
}
}