2014-01-15 64 views
1

我正在寻找帮助将数据绑定到WPF的datagrid。我曾经有两个双数组(t []和a_scaled []),并能够通过使用下面的代码将这两个数组绑定到datagrid。每个数组都从每个文本文件中读取。在datagrid中创建multipe列

现在我想修改此代码以显示多列中的多个数组。阵列总数取决于最终用户选择的内容。例如,如果用户从打开文件对话框中选择4个文件,则每个文件中的四个数组显示在数据网格中。感谢您的帮助,

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

请发表您的当前代码和XAML。 –

+0

这听起来像你想要多个指南。 OpenFiledialogs,从文件中读取文本,设置数据网格,以及在datagrid中绑定/显示字符串。在我看来,这个问题过于具体,无法发布任何自己的代码。谷歌这些主题,你会得到你的答案。 – rcj

回答

0

阵列总数取决于最终用户选择的内容。

换句话说,挑战在于确定运行时的列数。有多种方法可以执行此操作:

  1. 使用代码隐藏在运行时向DataGrid添加列。
  2. 绑定的ItemsSource到DataTable
  3. 绑定的ItemsSource到动态类型的对象

2号,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; 
} 
+0

非常感谢您的回答,我选择了您的建议没有。 2.你是对的。我提出了重复的问题,我将删除其中的一个。抱歉。 – user3170073