C# 如何在TreeListView中为特定单元格文本指定颜色

C# 如何在TreeListView中为特定单元格文本指定颜色,c#,.net,objectlistview,treelistview,C#,.net,Objectlistview,Treelistview,我在windows应用程序中使用TreeListView,我添加了一些数据来查看,现在我想根据某些条件为单元格文本指定颜色,请帮助我实现这一点 这是我试图显示数据的示例代码 var parent1 = new Node("PARENT1", "-", "-" ); parent1.Children.Add(new Node("CHILD_1_1", "A", "X")); parent1.Children.Add(new Node("CHILD_1_2", "A", "Y")); par

我在windows应用程序中使用TreeListView,我添加了一些数据来查看,现在我想根据某些条件为单元格文本指定颜色,请帮助我实现这一点

这是我试图显示数据的示例代码

    var parent1 = new Node("PARENT1", "-", "-" );
parent1.Children.Add(new Node("CHILD_1_1", "A", "X"));
parent1.Children.Add(new Node("CHILD_1_2", "A", "Y"));
parent1.Children.Add(new Node("CHILD_1_3", "A", "Z"));

    //here I need to give color for Third column value whose value is 'Y'

var parent2 = new Node("PARENT2", "-", "-" );
parent2.Children.Add(new Node("CHILD_2_1", "B", "W"));
parent2.Children.Add(new Node("CHILD_2_2", "B", "Z"));
parent2.Children.Add(new Node("CHILD_2_3", "B", "J"));

var parent3 = new Node("PARENT3", "-", "-");
parent3.Children.Add(new Node("CHILD_3_1", "C", "R"));
parent3.Children.Add(new Node("CHILD_3_2", "C", "T"));
data = new List<Node> { parent1, parent2, parent3 };
treeListView.Roots = data; 
var parent1=新节点(“parent1”、“-”、“-”;
parent1.Children.Add(新节点(“CHILD_1_1”,“A”,“X”));
parent1.Children.Add(新节点(“CHILD_1_2”,“A”,“Y”));
parent1.Children.Add(新节点(“CHILD_1_3”,“A”,“Z”));
//这里我需要为第三列的值指定颜色,它的值是'Y'
var parent2=新节点(“parent2”、“-”、“-”;
parent2.Children.Add(新节点(“CHILD_2_1”、“B”、“W”));
parent2.Children.Add(新节点(“CHILD_2_2”,“B”,“Z”));
parent2.Children.Add(新节点(“CHILD_2_3”,“B”,“J”));
var parent3=新节点(“parent3”、“-”、“-”;
parent3.Children.Add(新节点(“CHILD_3_1”、“C”、“R”));
parent3.Children.Add(新节点(“CHILD_3_2”,“C”,“T”));
数据=新列表{parent1,parent2,parent3};
根=数据;
要更改单个单元格的格式,需要将UseCellFormatEvents设置为true,然后侦听FormatCell事件。要以红色显示贷方余额,可以执行以下操作:

private void olv1\u FormatCell(对象发送方,FormatCellEventArgs e){
如果(e.ColumnIndex==此.creditBalanceColumn.Index){
客户=(客户)e.Model;
如果(客户信用<0)
e、 SubItem.ForeColor=颜色为红色;
}
}

@Rev1.0谢谢,它对我有用,但我使用了e.ColumnIndex==3(硬编码)我没有得到这个'this.creditBalanceColumn.Index',因为列名是'Credit',请澄清这个疑问。
creditBalanceColumn
只是列名的一个例子。只需使用列的名称(我认为默认情况下应该类似于olvColumn3)。可以从OLV列编辑器或设计器生成的代码部分查看和更改列名。使用ColumnIndex不是最好的主意,因为当您以后添加或删除列时,索引可能会更改并破坏您的代码。谢谢,现在我明白了,以前我把列标题和OLV列名混淆了。
private void olv1_FormatCell(object sender, FormatCellEventArgs e) {
    if (e.ColumnIndex == this.creditBalanceColumn.Index) {
        Customer customer = (Customer)e.Model;
        if (customer.Credit < 0)
            e.SubItem.ForeColor = Color.Red;
    }
}