Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 基于隐藏列的DataGridView行格式_Winforms_Datagridview - Fatal编程技术网

Winforms 基于隐藏列的DataGridView行格式

Winforms 基于隐藏列的DataGridView行格式,winforms,datagridview,Winforms,Datagridview,有没有办法根据用户看不到的列中的某个值设置行的样式?网格包含两行,如果删除了一些行,我希望它们被涂成红色。我有一个隐藏列,如果列被删除,它将存储true,否则将存储false。我尝试了CellFormatting,但由于我的列不可见,e.ColumnIndex从未为我的隐藏列提供正确的值 任何帮助都将不胜感激 编辑: 下面是我试图完成的一个图像。您可以看到第二行的文本为红色,这是由于用户在datagrid中看不到的列中的值造成的。当用户第一次看到表单时(加载时),这个网格应该是这样的颜色 根据我

有没有办法根据用户看不到的列中的某个值设置行的样式?网格包含两行,如果删除了一些行,我希望它们被涂成红色。我有一个隐藏列,如果列被删除,它将存储true,否则将存储false。我尝试了
CellFormatting
,但由于我的列不可见,
e.ColumnIndex
从未为我的隐藏列提供正确的值

任何帮助都将不胜感激

编辑:

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


根据我的理解,当列在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.
}  

对于未绑定的数据,请尝试使用
CellValueChanged
,而不是
CellFormatting
,对于绑定的数据集,请尝试使用
DataBindingComplete
。例如,假设您正在使用以下
按钮“删除/取消删除”一行。单击
事件:

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();
}
未绑定数据

以这种方式更改行“deleted”列值将触发以下事件处理程序。因此,您可以根据该列的值
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
事件就足够了。此事件将在第一次设置绑定时以及更改后(例如从
按钮1进行的更改)触发。单击
事件。在这里,您将遍历行,并根据隐藏列的值设置所需的样式。(请注意,对于具有
数据表
源的网格,对
按钮1\u Click
事件处理程序的额外更改。这是立即更改样式所必需的,否则在导航到其他行之前不会发生此更改。)


请发一张MCVE。一张预期结果的图片也会很有帮助。我需要根据dataGridView中不可见的列中的某些值为某些行上色。我可以得到值,但我想使用一些事件来给行着色。我找了一整天这个答案:((我发现了很多相同问题的不完整答案。谢谢@OhBeWise@ValiMaties很乐意帮忙!
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;
    }
}