2016-11-17 22 views
0

我正在使用下面的代碼來填充datatableList<double[]> list 但該數據表未填充。列表<T> to datatable返回空 - WPF

private void LoadThis(object sender, EventArgs e) 
     { 
      X model = DataContext as X; 

      List<double[]> list = new List<double[]>(); 
      for (int i = 0; i < model.RowFijtable; i++) 
      { 
       double[] rowdata = new double[model.ColFijtable]; 
       for (int j = 0; j < model.ColFijtable; j++) 
       { 
        rowdata[j] = model.TauTable[i, j]; 
       } 
       list.Add(rowdata); 
      } 
      DataTable table = ConvertListToDataTable(list); 
      dataGridView1.ItemsSource = table.AsDataView(); //Is this correct? 
} 

    private DataTable ConvertListToDataTable(List<double[]> list) 
    { 
     DataTable table = new DataTable(); 

     // Get max columns. 
     int columns = 0; 
     foreach (var array in list) 
     { 
      if (array.Length > columns) 
      { 
       columns = array.Length; 
      } 
     } 

     // Add columns. 
     for (int i = 0; i < columns; i++) 
     { 
      table.Columns.Add(); 
     } 

     // Add rows. 
     foreach (var array in list) 
     { 
      table.Rows.Add(array); 
     } 

     return table; 
    } 

這是我放在XAML

<Grid> 
    <DataGrid HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch" 
    Name="dataGridView1" 
    Loaded="LoadThis" 
    ItemsSource="{Binding}" 
    AutoGenerateColumns="True"/> 
</Grid> 

的信息,我可以看到的行和列的數目正確傳遞到數據表,但沒有數據值,即使列表中包含了完整的數據集!

我也試着這樣做dataGridView1.DataSource = table;但是這讓我錯誤爲「DataGrid不包含數據源的定義」 ..

回答

1

調用table.Rows.Add(array)似乎把整個數組的第一列的值。要將數組元素放入連續列中,請嘗試以下操作:

private DataTable ConvertListToDataTable(List<double[]> list) 
    { 
     DataTable table = new DataTable(); 

     // Get max columns. 
     int columns = 0; 
     foreach (var array in list) 
     { 
      if (array.Length > columns) 
      { 
       columns = array.Length; 
      } 
     } 

     // Add columns. 
     for (int i = 0; i < columns; i++) 
     { 
      // Provide default column name & data type 
      table.Columns.Add("Column" + (i+1).ToString(), typeof(double)); 
     } 

     // Add rows. 
     foreach (var array in list) 
     { 
      // assign each array element to the appropriate column 
      var row = table.NewRow(); 
      for (int i = 0; i < array.Length; ++i) 
       row.SetField(i, array[i]); 
      table.Rows.Add(row); 
     } 

     return table; 
    }   
+0

感謝您的工作!有沒有辦法添加「行名」?像table.columns.add()語句? @JohnD – user7157732

+0

沒有行名的內置概念 - 但是您可以在開始處添加一個名爲「RowDescription」或「RowName」的列,並用自己的行總結信息填充它。 –