【问题标题】:Add an image to a bound datagrid将图像添加到绑定的数据网格
【发布时间】:2014-07-22 17:44:36
【问题描述】:

我有一个数据绑定的数据网格,但在绑定发生之前,我使用数据网格加载行事件处理程序根据满足的条件为每行的背景着色。我想删除它,我决定向未绑定的数据网格添加一个数据模板列(状态),但我希望根据使用 LoadingRow 事件满足的条件填充适当的图像。我不使用 DataTemplate 的原因是确定正确的 iamge 所需的日期比较。

我查看了几个示例,但不知道如何将图像添加到“状态”列的单元格中以包含每行的图像。我将非常感谢您的指导。

一如既往地感谢您的帮助,

XAML

<DataGrid AutoGenerateColumns="False" x:Name="schDataGrid" IsReadOnly="True" LoadingRow="schDataGrid_LoadingRow" CanUserAddRows="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="STATUS" />  <-- Add Image Here -->
        <DataGridTextColumn Binding="{Binding ITEMNUMBER}" Header="ITEMNUMBER" />
        <DataGridTextColumn Binding="{Binding CODE}" Header="CODE" />
        <DataGridTextColumn Binding="{Binding DESC}" Header="STD DESCRIPTION" />
        <DataGridTextColumn Binding="{Binding DESCRIPTION}" Header="UNIQUE DESCRIPTION" />
        <DataGridTextColumn Binding="{Binding SERIALNUMBER}" Header="SERIAL NUMBER" />
    </DataGrid.Columns>
</DataGrid>

C#

private void schDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
    {
            var row = e.Row;
            DataRowView rView = row.Item as DataRowView;
            string DUEDATE = rView["DUEDATE"].ToString();

            DateTime now = Convert.ToDateTime(DateTime.Now.ToString("dd/MM/yyyy"));
            DateTime compareDate = Convert.ToDateTime(DUEDATE);
            TimeSpan difference = now - compareDate;

            if (difference.Days <= 0)
            {
                Image image = new Image();
                var uriSource = new Uri(@"/main;component/Images/Icons/green.gif", UriKind.Relative);
                image.Source = new BitmapImage(uriSource);

                //Now Add the image to the DataGridTemplateColumn["STATUS"]
                rItem["STATUS"] = image;
            }

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    如果状态是您绑定到网格的同一对象的一部分,您仍然可以使用 DataTemplate,如下所示:

      <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
              <Image Source="{Binding Status, Converter={StaticResource StatusToImageConvertor}}"/>
          </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    

    在您的 XAML 资源中包含转换器的参考:

    <converter:StatusToImageConvertor:Key="StatusToImageConvertor"/>
    

    这就是你的转换器的样子:

     public sealed class StatusToImageConvertor : IValueConverter
    {
    
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
    
        // The value here is your status being passed from XAML binding
            if (value is string)
            {
               if(value == "x") return "image1.png";
           if(value = "y") return "image2.png";
           else return "image3.png";
    
        }
        else return string.empty;   
    
        }
    
      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    如果这对你有帮助,请告诉我

    【讨论】:

    • 感谢您的帮助 Praveena,我遇到了转换器参考的问题,我收到以下错误“错误 1 ​​''转换器'是未声明的前缀。第 6 行,位置 10。” XML 无效。”
    • 您必须首先在 XAML 中添加引用,如下所示:xmlns:converter="clr-namespace:;assembly="
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2014-09-11
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多