gpt4 book ai didi

c# - DataGridColumn 与动态生成的数据绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 22:27:59 24 4
gpt4 key购买 nike

我的程序中有大量数据是从网络服务生成的。我需要在 DataGrid 中显示此数据,但返回的数据集合都有不同的格式(一个可能是 3 列,下一个可能是 7)所以我无法创建一个特定的对象来保存此数据。我无法显示此信息。现在我正在尝试使用这种方法。我将数据放入一个二维的 KeyValuePairs 列表中。键是该数据所属的列,值是该行的输出。这就是我现在正在尝试的。

private void SetDataValuesExecute(List<List<KeyValuePair<string,object>>> Data)
{
ResultsCollection = Data;
ValuesDataGrid.Columns.Clear();
foreach (string colName in Data[0].Select(x => x.Key).ToList())
{
DataGridTextColumn tempCol = new DataGridTextColumn();
tempCol.Header = colName;
Binding bind = new Binding();
bind.Source = ResultsCollection.Select(x => x.FirstOrDefault(y => y.Key == colName).Value.ToString()).ToList();
tempCol.Binding = bind;
ValuesDataGrid.Columns.Add(tempCol);
}
}

ResultsCollection 是一个非 volatile 变量,用作我的绑定(bind)源。它是我构建 DataGrid 所需的所有二维列表数据的副本。

这会查看第一个条目并提取列标题值并基于该值创建新列。绑定(bind)语句查看每一行,获取指定列的数据,并尝试将其设置为列的绑定(bind)。这允许我同时拥有列名和该列中所有数据的列表。不幸的是,将数据列表绑定(bind)到列最终不会显示任何数据。

所以我的问题是:我需要如何格式化我的数据才能使列绑定(bind)实际显示数据?我是不是完全错误地处理了这种情况?感谢任何帮助,因为我很困惑。

最佳答案

这是一个完整的工作示例

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

var data = new MyViewModel();

int columnIndex = 0;

foreach (var name in data.ColumnNames)
{
grid.Columns.Add(
new DataGridTextColumn
{
Header = name,
Binding = new Binding(
string.Format("Values[{0}]", columnIndex++))
});
}

DataContext = data;
}
}

public class MyViewModel
{
public MyViewModel()
{
Items = new List<RowDataItem>
{
new RowDataItem(),
new RowDataItem(),
new RowDataItem(),
};

ColumnNames = new List<string>{ "Col 1", "Col 2", "Col 3"};
}

public IList<string> ColumnNames { get; private set; }

public IList<RowDataItem> Items { get; private set; }
}

public class RowDataItem
{
public RowDataItem()
{
Values = new List<string>{ "One", "Two", "Three"};
}

public IList<string> Values { get; private set; }
}

Xaml

<Grid>
<DataGrid x:Name="grid" ItemsSource="{Binding Items}"
AutoGenerateColumns="False"/>
</Grid>

关于c# - DataGridColumn 与动态生成的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11036533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com