2011-09-06 134 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'已经在第一行中包含所有标题 –