在数据绑定DataGridView中更改显示的信息

时间:2017-11-17 18:00:38

标签: c# datagridview bindingsource

我有一个数据绑定的datagridview。其中一列(如下所示)链接到对象的布尔值。检索布尔值的方法是“curResultSet.Pass”。我不希望在常规单元格中使用“True”或“False”,而是希望该列具有“Pass”图标或“Fail”图标,具体取决于“curResult.Pass”的值。

我很确定我将.png设置为Icon的方法是错误的,但我可以稍后再担心。现在,我最担心的是我不知道如何根据布尔值在DataGridViewImageViewColumn中设置某个Icon,如下面的代码所示。

DataGridViewImageColumn imgCol = new DataGridViewImageColumn(true);

foreach(RunResult curResult in curResultSet)
{
     bindingSource1.Add(curResult);
}

resultDataGridView.AutoGenerateColumns = false;
resultDataGridView.DataSource = bindingSource1;

imgCol.Image = Image.FromFile(imageFilePath + "NG icon.png");
imgCol.Icon = Icon.ExtractAssociatedIcon(imageFilePath + "OK icon.png");
imgCol.ValuesAreIcons = true;

resultDataGridView.Columns.Add(imgCol);
resultDataGridView.Columns[resultDataGridView.ColumnCount - 1].DataPropertyName = "Pass";
resultDataGridView.Columns[resultDataGridView.ColumnCount - 1].Name = "status";

任何人都知道如何在“curResultSet []。传递==真”时显示我的“OK icon.png”,并在“curResultSet []时显示”NG icon.png“。传递==错误” ?谢谢!

1 个答案:

答案 0 :(得分:0)

您应该使用转换器并将图像源绑定到布尔值:     公共类BoolToUriConverter:IValueConverter     {         私有const字符串filePath ="您的路径&#34 ;;

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool val = (bool)value ;
        string path = (val == true) ? $"{filePath}OK icon.png" : $"{filePath}NG icon.png";
        return new Uri(path);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

并使用它将布尔列绑定到图像列

<DataGrid ItemsSource="{Binding Collection1}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Field1" Binding="{Binding Field1}"></DataGridTextColumn>
                <DataGridTextColumn Header="Field2" Binding="{Binding Field2}"></DataGridTextColumn>
                <DataGridCheckBoxColumn Header="Field3" Binding="{Binding Field3}"></DataGridCheckBoxColumn>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="{Binding Field3, Converter={StaticResource boolToUriConverter}}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>