2016-06-21 63 views
1

有什么方法可以根据用户不可见的列中的某个值设置行的样式吗?网格包含几行,我希望一些行如果被删除就会被涂成红色。如果列被删除,我有一个隐藏的列存储true,否则为false。我试过CellFormatting,但由于我的列不可见,因此e.ColumnIndex从未为我的隐藏列提供正确的值。基于隐藏列的DataGridView行格式化

任何帮助将不胜感激。

编辑:

下面是什么,我试图完成的图像。您可以看到第二行的文本为红色,这是由于用户在数据网格中看不到的列中的值所致。当用户第一次看到表单时(这是第一次),这个网格应该像这样着色。

enter image description here

+0

请发布一个MCVE。预期结果的图片也会有所帮助 – ASh

回答

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(); 
} 

绑定数据

更改行以这种方式“删除”的列值将触发以下事件处理器。因此,您可以用颜色的基础上TrueFalse该列的值的行:

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; 
    } 
} 
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. 
} 
+0

我需要根据dataGridView中不可见的列中的某些值对某些行着色。我可以得到这个值,但我想用一些事件来为行着色。 – Rocshy