2016-11-01 6 views
1

Die folgenden Zeilen zeigen den Pfad anstelle des Bildes, zu dem es führt. Die AutoGenerateColums-Eigenschaft wird auf "true" gesetzt. Wenn sie auf "false" gesetzt wird, wird sie in vollständig leeren Zeilen angezeigt.DataGrid zeigt den Pfad des Bildes anstelle des Bildes selbst

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; 

Bitte helfen Sie mir irgendwie die Bilder zu zeigen! Vielen Dank.

Antwort

0

Zunächst generieren DataGrid DataGridTextColumns standardmäßig und wir müssen das AutoGeneratingColumn-Ereignis verwenden, um den Typ der Spalte zu ändern. Wir müssen DataGridTemplateColumn verwenden, das Image in der Vorlage enthält (die Bildquelle sollte an die DataTable-Spalte angepasst werden). Der beste Ort zum Definieren einer Vorlage ist in Ressourcen.

hier ist, wie das Problem gelöst werden kann:

XAML Teil

<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 
     }; 
    } 
} 
+0

Super, danke! Funktioniert perfekt. – zadrian

0

erstellen TemplateColumn mit Image Kontrolle und AutoGenerateColumns to false eingestellt.