Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
C# 如何在数据网格上绘制线条_C#_Wpf - Fatal编程技术网

C# 如何在数据网格上绘制线条

C# 如何在数据网格上绘制线条,c#,wpf,C#,Wpf,如何在数据网格上绘制一条线,我试着这样做,但不起作用。 “row”变量始终为null或 private void PersonData() { foreach (SingleEstoqueEntrada item in DataGridEstoque.ItemsSource) { try { var row = DataGridEstoque.ItemContainer

如何在数据网格上绘制一条线,我试着这样做,但不起作用。 “row”变量始终为null或

    private void PersonData()
    {
        foreach (SingleEstoqueEntrada item in DataGridEstoque.ItemsSource)
        {
            try
            {
                var row = DataGridEstoque.ItemContainerGenerator.ContainerFromIndex(I) as DataGridRow;
                if (item.ESTOQUE == 0.00m)
                    row.Background = Brushes.Pink;
                else
                    row.Background = Brushes.YellowGreen;
            }
            catch (Exception _Exception)
            {
                MessageBox.Show(_Exception.Message);
            }
        }
    }
试一试

而不是

var row = DataGridEstoque.ItemContainerGenerator.ContainerFromIndex(I) as DataGridRow;

如果数据被正确绑定,并且有一个前面提到的属性
ESTOQUE
(也是从代码中假定的),那么将此样式放置在参考资料中可能会产生预期的效果

    <Style TargetType="DataGridRow">
        <Setter Property="Background"
                Value="YellowGreen" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding ESTOQUE}"
                         Value="0">
                <Setter Property="Background"
                        Value="Pink" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

样本xaml

    <DataGrid>
        <DataGrid.Resources>
            <Style TargetType="DataGridRow">
                <Setter Property="Background"
                        Value="YellowGreen" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding}"
                                 Value="item 1">
                        <Setter Property="Background"
                                Value="Pink" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}"
                                Header="A Column" />
            <DataGridTextColumn Binding="{Binding Length}"
                                Header="Length" />
        </DataGrid.Columns>
        <sys:String>item 1</sys:String>
        <sys:String>item 2</sys:String>
        <sys:String>item 1</sys:String>
        <sys:String>item 2</sys:String>
        <sys:String>item 2</sys:String>
        <sys:String>item 2</sys:String>
    </DataGrid>

项目1
项目2
项目1
项目2
项目2
项目2
结果


在上面的示例中,我编写了触发器来修改所有包含
项目1

的行,这些行可能完全没有@DJKRAZE的副本。这是winforms,这里是wpf。@user3270570-你把代码放在哪里了?只有在UI上呈现行时才会生成行。如果将此代码放在UserControl/Window的构造函数中,它将不起作用。使用
DataTemplate.Triggers可以轻松完成此操作。共享你的模板我们可以看一下。Rohit上面提到的:在控件加载之前,项目不在那里。尝试将此代码放入Loaded()处理程序中。
    <DataGrid>
        <DataGrid.Resources>
            <Style TargetType="DataGridRow">
                <Setter Property="Background"
                        Value="YellowGreen" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding}"
                                 Value="item 1">
                        <Setter Property="Background"
                                Value="Pink" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}"
                                Header="A Column" />
            <DataGridTextColumn Binding="{Binding Length}"
                                Header="Length" />
        </DataGrid.Columns>
        <sys:String>item 1</sys:String>
        <sys:String>item 2</sys:String>
        <sys:String>item 1</sys:String>
        <sys:String>item 2</sys:String>
        <sys:String>item 2</sys:String>
        <sys:String>item 2</sys:String>
    </DataGrid>