2011-09-06 179 views
2

我有一個名爲previewTable的Datagrid。將矩陣綁定到數據網格

我有一個字符串集合的集合代表表格數據:

ObservableCollection<ObservableCollection<string>> tableData 

我也有一個字符串的集合,代表列標題:

ObservableCollection<string> columnsHeaders 

我需要使用來創建列列標題集合,我在這裏實現此:

 foreach (string columnName in columnsHeaders) 
     { 
      DataGridTextColumn column = new DataGridTextColumn(); 
      column.Header = columnName; 
      previewTable.Columns.Add(column); 
     } 

現在我需要將表綁定到數據。 問題是:

previewTable.ItemsSource = table 

不起作用。

我總是有9個標題和數據收集的每個大小爲9

幫助,將不勝感激

回答

0

您可以使用索引中的映射,所以下面應該工作: -

 int i = 0; 
     foreach (string columnName in columnsHeaders) 
     { 
      DataGridTextColumn column = new DataGridTextColumn(); 
      column.Header = columnName; 
      column.Binding = new Binding("[" + i.ToString(); + "]"); 
      previewTable.Columns.Add(column); 
      i += 1; 
     } 
1

一些附加類:

public class EntityDataRow 
{ 
    public List<string> Items { get; set; } 
} 

public class RowItemsConverter : IValueConverter //converter for binging 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     try 
     { 
      var list = (List<string>) value; 
      var index = (Int32) parameter; 
      return list[index]; 
     } 
     catch(Exception) 
     { 
      return String.Empty; 
     } 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

這是你的代碼(DAT a是EntityRow的列表)

   var headers = data[0].Items; 
       data.RemoveAt(0); 

       PreviewGrid.Columns.Clear(); 
       PreviewGrid.ItemsSource = data; 
       for (var i = 0; i < headers.Count; i++) 
       { 
        var column = new DataGridTextColumn { Header = headers[i] }; 
        var binding = new Binding("Items"); 
        var converter = new RowItemsConverter(); 
        binding.Converter = converter; 
        binding.ConverterParameter = i; 
        column.Binding = binding; 
        PreviewGrid.Columns.Add(column); 
       } 
+0

忘記提及,在我的示例中,變量'data'已經在第一行中包含所有標題 –