我有一个名为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 :(得分: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);
}
答案 1 :(得分: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;
}