我正在寻找帮助将数据绑定到WPF的datagrid。我曾经有两个双数组(t []和a_scaled []),并能够使用下面的代码将这两个数组绑定到datagrid。从每个文本文件中读取每个数组。
现在我想修改此代码以在多列中显示多个数组。数组的总数取决于最终用户选择的内容。例如,如果用户从openfile对话框中选择4个文件,则每个文件中的四个数组将显示在datagrid上。谢谢你的帮助,
c#:
private void openfile_Click(object sender, RoutedEventArgs e)
{
for (int i = 1; i < t.Length; i++)
{
tvsa.Add(new TvsA() { T = t[i], Acc = a_scaled[i] });
}
datagrid_accs.ItemsSource = tvsa;
public class TvsA
{
public double T { get; set; }
public double Acc { get; set; }
}
XAML:
<Border BorderThickness="2" Margin="1">
<StackPanel Width="auto" Margin="10" >
<Label Content="Target ARS Input:" FontWeight="Bold" />
<ScrollViewer Height="auto" Width="auto" >
<DataGrid Name="datagrid_tars" Width="auto" AutoGenerateColumns="True" >
</DataGrid>
</ScrollViewer>
</StackPanel>
</Border>
ps:我希望总有一天我能回答他们提出的问题来帮助别人。
答案 0 :(得分:0)
数组的总数取决于最终用户选择的内容。
换句话说,挑战在于确定运行时的列数。有多种方法可以做到这一点:
DataTable
数字2,DataTable可能是您的方案的最佳方法。只需为每个文件/数组添加一列,然后将每个文件的迭代作为一行添加到表中。有一个如何在上面的链接中执行此操作的示例,但是这是您可以这样做的方法(假设一个获取数组列表的函数,并返回DataTable)(未经测试):
DataTable GetTable(List<double[]> sourceArrays)
{
// 1. add the columns
DataTable table = new DataTable("table");
for (int i=0 ; i<sourceArrays.Length ; i++)
table.Add(new DataColumn());
// 2. add the rows
bool done = false;
int rowNum = 0;
while (!done)
{
var row = new List<double?>();
for (int i=0 ; i<sourceArrays.Length ; i++)
row.Add(rowNum < sourceArrays[i].Count ? sourceArrays[i][rownum] : null);
if (row.All(col => !col.HasValue))
done = true;
else
table.Rows.Add(row.ToArray());
rowNum++;
}
return table;
}