2017-11-10 4 views
0

私はdatatableにデータを引き出し、次にdatagridにデータを引き出します。データは次のような形式です。リストを表示するには<T>

"Time","Dist","speed","susp","rpm" 
"0.000","0","235","29","13550" 
"0.005","1","240","28.5","13560" 
"0.010","2","245","28","13570" 
"0.015","3","250","27.5","13580" 
"0.020","4","255","27","13590" 
"0.025","5","260","26.5","13600" 
"0.030","6","265","26","13610" 

しかし、私が持っている列の数と、それらの名前が事前に未知であり、データセットにデータセットから変更されます。

データは、ボタンクリックイベント(WPF)でプルインされます。

private void databtn_Click(object sender, RoutedEventArgs e) 
    { 
     { 
      OpenFileDialog openfile = new OpenFileDialog(); 
      openfile.DefaultExt = ".xlsx"; 
      openfile.Filter = "(.xlsx)|*.xlsx"; 

      var browsefile = openfile.ShowDialog(); 

      if (browsefile == true) 
      { 
       datafilepath.Text = openfile.FileName; 

       ExcelEngine excelEngine = new ExcelEngine(); 

       IApplication application = excelEngine.Excel; 

       application.DefaultVersion = ExcelVersion.Excel2013; 

       IWorkbook workbook = application.Workbooks.Open(datafilepath.Text); 

       IWorksheet worksheet = workbook.Worksheets[0]; 

       DataTable dt = worksheet.ExportDataTable(worksheet.UsedRange, ExcelExportDataTableOptions.ColumnNames); 

       DG.ItemsSource = dt.DefaultView; 
      } 
     } 
    } 

どのように私は、リストの名前が列ヘッダーで与えられた値の個々のリストの中にこれらの列のそれぞれを置くことができますか?

次に、これらを使用してx、yチャートをプロットします。 (時間、rpm)または(距離、rpm) - 私はこれを行うことができますが、datatableまたはdatagridの指定された列の値を反復しているように見えません。

私はC#とプログラミングの初心者です。これは初心者であれば申し訳ありませんが、事前にお手伝いいただきありがとうございます。

答えて

3

あなたはDictionary<string, List<object>>にリストを格納することができます

Dictionary<string, List<object>> dict = dt.Columns.Cast<DataColumn>() 
    .ToDictionary(c => c.ColumnName, c => dt.AsEnumerable().Select(r => r[c]).ToList()); 

これは、LINQクエリであるので、あなたはusing System.Linqを追加する必要があります。

出力:

foreach (var kv in dict) 
    Console.WriteLine($"Column: {kv.Key}, All values: {String.Join(",", kv.Value)}"); 
+0

ありがとう、私は使用して辞書の詳細を読む必要があります。 foreachループやsimilairを使って特定の列の内容を返す方法はありますか?ちょうど、x、yのdataseriesにデータを取得することを考えて..再度ありがとう –

+0

確かに、あなたはColumnName経由でリストを得る:リスト値= dict ["ColumnName"]; –

+0

Brilliant!ありがとう、ティム..最後のビット、私は約束する!これらの辞書をネストできますか?だから私はリストの辞書の辞書に終わるだろう...それは意味をなさない?私はリストの複数の辞書を持っています、それぞれが同じヘッダーを持っています..別の辞書の中にネストされている場合、私は別の辞書から列を取得しているときにこれは問題を引き起こすでしょうか?再度、感謝します –

関連する問題