2016-11-01 8 views
1

次の行は、その先になるパスの代わりにパスを表示します。 AutoGenerateColumsはtrueに設定され、falseに設定すると完全に空の行になります。DataGridは画像そのものの代わりに画像のパスを表示します

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; 

どうかよろしくお願いします。ありがとうございました。

答えて

0

まず、DataGridはデフォルトでDataGridTextColumnsを生成し、AutoGeneratingColumnイベントを使用して列のタイプを変更する必要があります。テンプレート内のImageを含む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 
     }; 
    } 
} 
+0

恐ろしい、ありがとう!完璧に動作します。 – zadrian

0

TemplateColumnImageとコントロールを作成し、AutoGenerateColumns to falseを設定します。

関連する問題