first of all, DataGrid generate DataGridTextColumns by default and we have to use AutoGeneratingColumn
event to change type of column. We need to use DataGridTemplateColumn which contains Image in template (image source should be bound to correct DataTable column). The best place to define template is in Resources.
here is how the issue can be solved:
xaml part
<DataGrid Name="ChannelDataGrid" AutoGeneratingColumn="ChannelDataGrid_OnAutoGeneratingColumn">
<DataGrid.Resources>
<DataTemplate x:Key="ImgCell">
<Image Source="{Binding Path=Img}"/>
</DataTemplate>
</DataGrid.Resources>
</DataGrid>
code:
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
};
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…