C# 基于可编辑属性设置DataGridview列的背景色

C# 基于可编辑属性设置DataGridview列的背景色,c#,.net,datagridview,C#,.net,Datagridview,我通过直接分配数据表从数据库填充Datagridview。Datagridview中有些列是可编辑的,有些是不可编辑的。我想将可编辑列的颜色设置为“黄色” 我知道我可以将列的颜色设置为 myGrid.Columns["myColumn"].DefaultCellStyle.BackColor = Color.Red; 但是如何检查可编辑属性并在此基础上设置颜色 更新: 这就是我要找的。。。黄色单元格应该是可编辑的。基本上是指批发商价格、零售价格下的单元格。。etc应该是可编辑的 使用 如前所述

我通过直接分配数据表从数据库填充Datagridview。Datagridview中有些列是可编辑的,有些是不可编辑的。我想将可编辑列的颜色设置为“黄色”

我知道我可以将列的颜色设置为

myGrid.Columns["myColumn"].DefaultCellStyle.BackColor = Color.Red;
但是如何检查可编辑属性并在此基础上设置颜色

更新: 这就是我要找的。。。黄色单元格应该是可编辑的。基本上是指批发商价格、零售价格下的单元格。。etc应该是可编辑的

使用


如前所述,您还可以重写paint方法。

这只是一个使列可编辑的示例代码,dgvSample是您在表单中添加的DataGridView。在这里,我已使所有奇数列都可编辑。所以,以同样的方式,您可以有一个带有复选框的隐藏列,并检查其是否可编辑,以实现相同的效果

dgvSample.AllowUserToAddRows = false;
dgvSample.AllowUserToDeleteRows = false;

for (int i = 0; i <= 10; i++)
{
    string[] values = new string[] { "1", "Name" };
    dgvSample.Rows.Add(values);
    if (i % 2 == 0)
    {
        DataGridViewRow r = dgvSample.Rows[dgvSample.Rows.Count - 1];
        r.ReadOnly = true;
    }
    else
    {
        r.DefaultCellStyle.BackColor = Color.Yellow;
    }
}
dgvSample.allowUserToAddress=false;
dgvSample.AllowUserToDeleteRows=false;

对于(int i=0;i我可以理解您的问题,您想更改
datagridview
的可编辑
单元格的颜色吗

您可以通过使用
datagridview
DataGridViewCellFormattingEvent
事件来实现这一点,并检查列是否为
readonly
,然后更改
datagridviewcell
的背景

private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (!dgv.Columns[e.ColumnIndex].ReadOnly)
    {
        e.CellStyle.BackColor = Color.Yellow;
    }
}
输出:


谢谢..但是继续获取此错误
对象'不包含'Cells'的定义,并且找不到接受'object'类型的第一个参数的扩展方法'Cells'(是否缺少using指令或程序集引用?)
for rows.CellsOne sec,查看一下。立即尝试。更新了我的答案谢谢…但我不能通过给出像这样的列名来进行迭代。Cells[“myColumn”].Value..是否有一种方法可以在for each循环中进行迭代。如果您只查找一列,请直接使用
row.Cells[1]访问它
我试过了..但是黄色显示的是不可编辑的单元格,并且是随机的..我在
if语句中的
dgv
之前添加了
,这就是我使用的
私有void dgvGetData_CellFormatting(对象发送方,DataGridViewCellFormattingEventArgs){if(!dgvGetData.Columns[e.ColumnIndex].ReadOnly){e.CellStyle.BackColor=Color.Yellow;}
在datagridview列设置中,如果(!dgv.Columns[e.ColumnIndex].ReadOnly)使用此if语句,它应该可以正常工作。
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (!dgv.Columns[e.ColumnIndex].ReadOnly)
    {
        e.CellStyle.BackColor = Color.Yellow;
    }
}