【问题标题】:Alter Displayed Information in data-bound DataGridView更改数据绑定 DataGridView 中的显示信息
【发布时间】:2017-11-17 18:00:37
【问题描述】:

我有一个数据绑定的 datagridview。如下所示的其中一列链接到来自对象的布尔值。检索布尔值的方法是“curResultSet.Pass”。我不想在常规单元格中说“真”或“假”,而是希望该列有一个“通过”图标或“失败”图标,具体取决于“curResult.Pass”的值。

我相当肯定我将 .png 设置为 Icon 的方法是错误的,但我稍后会担心。现在,我最担心的是我不确定如何根据布尔值在 DataGridViewImageViewColumn 中设置某个图标,如下面的代码所示。

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[].Pass == True”时显示“OK icon.png”并在“curResultSet[].Pass == False”时显示“NG icon.png” ?谢谢!

【问题讨论】:

    标签: c# datagridview bindingsource


    【解决方案1】:

    您应该使用转换器并将图像源绑定到布尔值: 公共类 BoolToUriConverter : IValueConverter { private const string filePath = "你的路径";

        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>
    

    【讨论】:

    • 这是 WPF DataGrid 的正确想法,但 OP 是关于 WinForm DataGridView - 完全不同的动物。
    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多