DataGrid显示图像的路径,而不是图像本身

本文关键字:图像 路径 显示 显示图 DataGrid | 更新日期: 2023-09-27 18:15:42

下面几行显示的是路径,而不是它指向的图像。AutoGenerateColums设置为true,将其设置为false将以完全空的行结束。

System.Data.DataTable DataTable = new System.Data.DataTable();
System.Data.DataColumn DataColumn = new System.Data.DataColumn();
Uri uri = new Uri(@"C:/Users/User/Desktop/szagdoga/error.png");
BitmapImage img = new BitmapImage(uri);
DataColumn.DataType = img.GetType();
DataColumn.ColumnName = ("this");
DataTable.Columns.Add("Test #");
DataTable.Columns.Add(DataColumn);
DataTable.Columns.Add("Min Range");
DataTable.Columns.Add("Max Range");
DataTable.Columns.Add("Result");
for (int i = 6; i <50; i++)
    DataTable.Rows.Add(ExcelFile[0, i],img, ExcelFile[1,i],0,0,0);
ChannelDataGrid.ItemsSource = DataTable.DefaultView;

请帮我把图片显示出来!谢谢你。

DataGrid显示图像的路径,而不是图像本身

首先,DataGrid默认生成DataGridTextColumns,我们必须使用AutoGeneratingColumn事件来更改列的类型。我们需要使用DataGridTemplateColumn,其中包含模板中的图像(图像源应绑定到正确的DataTable列)。定义模板的最佳位置是在参考资料中。

问题的解决方法如下:

xaml部分
<DataGrid Name="ChannelDataGrid" AutoGeneratingColumn="ChannelDataGrid_OnAutoGeneratingColumn">
    <DataGrid.Resources>
        <DataTemplate x:Key="ImgCell">
            <Image Source="{Binding Path=Img}"/>
        </DataTemplate>
    </DataGrid.Resources>        
</DataGrid>
代码:

private void InitializeDataTable()
{
    System.Data.DataTable DataTable = new System.Data.DataTable
    {
        Columns = {"Test #", "Img", "Min Range", "Max Range", "Result"}
    };
    Uri uri = new Uri(@"C:/Users/User/Desktop/szagdoga/error.png");
    for (int i = 6; i < 50; i++)
        DataTable.Rows.Add(ExcelFile[0, i], uri, ExcelFile[1, i], 0, 0);
    ChannelDataGrid.ItemsSource = DataTable.DefaultView;
}
private void ChannelDataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyName == "Img")
    {
        // replace text column with image column
        e.Column = new DataGridTemplateColumn
        {
            // searching for predefined tenplate in Resources
            CellTemplate = (sender as DataGrid).Resources["ImgCell"] as DataTemplate,
            HeaderTemplate = e.Column.HeaderTemplate,
            Header = e.Column.Header
        };
    }
}

创建控制ImageTemplateColumn,设置AutoGenerateColumns to false