2017-12-04 7 views
3

Datatableのすべての列に対して、プログラムでCharting(SciChart)に使用するXyDataSeriesを作成しようとしています。私はこれを行う必要があります。なぜなら、列と名前の量はあらかじめわかっていないからです。C#プログラミングによるxyseriesの作成

任意の系列について、xの値は常に0から増分する整数になり、yの値は列の値になります。

IはDatatableにExcelデータをインポートした後、列ヘッダは、以下によりListの名前であるListとしてDictionaryに各列を通過しています。

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

私はのような何かをすることはできますか?

私は、列とその名前の量を知っていたと仮定して、私はすべての列/リストでこれを行うことができます。

手動でXyDataSeriesを作成し、値を追加するためのリストを反復処理します。私はグラフ(XAMLで定義されている)のchartseries.DataSeriesをそれぞれXyDataSeriesに設定します。

var list = dict["ListName"]; 
XyDataSeries<double, double> xyseries; 
xyseries = new XyDataSeries<double, double>() { SeriesName = "ListName" }; 
foreach (var i in list) 
{ 
    double x = 1; 
    var d = Convert.ToDouble(i); 
    xyseries.Append(x++, d); 
} 
chartseries.DataSeries = xyseries; 

また、XAMLでシリーズを宣言する必要があります。これを回避することはできますか?

これを600回以上実行することは理想的なものではありませんが、私はこのためのエレガントな解決策には本当に切望しています。

さらに詳しい情報を提供できる場合は、私にお知らせください。ありがとう

+0

あなたは辞書を反復することができます: 'foreach(var keyValuePair in dict){var list = keyValuePair.Value; ...} ' – ASh

+0

こんにちは、私は私が辞書を繰り返し処理できると考えていました。実際に知りたいのは、どのようにして' Dictionary > 'を作成して、 XyDataSeriesを返しますか?それらをすべて手動で設定する必要はありません。 – User9123

答えて

1

私はDictionary<string, XyDataSeries<double, double>>のような何かをすることができますか?

ToDictionaryメソッドは、第2引数としてFunc<TSource, TElement>を受け入れます。したがって、XyDataSeries<double, double>を作成して入力することができます。次のようなものがあります:

dict = dt.Columns.Cast<DataColumn>() 
    .ToDictionary(c => c.ColumnName, c => 
    { 
     var dataSeries = new XyDataSeries<double, double>(); 
     double x = 1.0; 
     dataSeries.Append(dt.AsEnumerable().Select(_ => x++), dt.AsEnumerable().Select(r => Convert.ToDouble(r[c]))); 
     return dataSeries; 
    }); 
+0

ありがとう、私はこれを試して、私は暗黙のうちに暗黙的にタイプList <>をDictionary <>に変換できないという例外を取得します。データはclickイベントを通してインポートされるまでnullです。 ? – User9123

+0

リストを辞書に変換しています...!? – mm8

+0

私はエラーを誤解したと思う。 '暗黙的に型を変換できません。 'System.Collections.Generic.Dictionary >>' > ' – User9123

関連する問題