【问题标题】:Binding a matrix to datagrid将矩阵绑定到数据网格
【发布时间】:2011-09-06 08:54:32
【问题描述】:

我有一个名为 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。

我们将不胜感激

【问题讨论】:

    标签: silverlight binding


    【解决方案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();
        }
    }
    

    这是您的代码(数据是 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);
                    }
    

    【讨论】:

    • 忘了提及,在我的示例中,变量“数据”已经在第一行包含所有标题
    【解决方案2】:

    您可以在绑定中使用索引器,因此以下内容应该可以工作:-

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

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      相关资源
      最近更新 更多