実行時にユーザーが操作する動的チャート コントロールがあります。
ユーザーは、チャートに複数のシリーズを追加できます。
ユーザーが各シリーズを日付でフィルタリングする方法を実装しようとしています。
MSDN は次を提供します。
// Filters all points where the X value is less than, or equal to, a specific date.
// The resulting data is stored in an output series, preserving the original data.
myDataManip.Filter(CompareMethod.LessOrEqual, DateTime.Parse("1/1/2001").ToOADate(), "MySeries", "ResultSeries", "X");
単一のシリーズがあり、入力シリーズ名を知っていれば、これで問題ありません。
問題は、複数のシリーズを持つチャートにこれをどのように実装するかです。
ここに私がした簡単な回避策があります:
private void button2_Click(object sender, EventArgs e)
{
var dt = dateTimePicker.Value;
var tempSeries = new Series[chart1.Series.Count];
try
{
for (var i = 0; i < chart1.Series.Count; i++)
{
tempSeries[i] = new Series
{
Name = chart1.Series[i].Name,
IsVisibleInLegend = true,
IsXValueIndexed = true
};
for (var j = 0; j < chart1.Series[i].Points.Count; j++)
{
if (DateTime.Parse(chart1.Series[i].Points[j].AxisLabel) <= dt)
{
tempSeries[i].Points.Add(chart1.Series[i].Points[j]);
}
}
}
chart1.Series.Clear();
for (var i = 0; i < tempSeries.Count(); i++)
{
chart1.Series.Add(tempSeries[i]);
}
}
catch (Exception error)
{
MessageBox.Show(error.ToString());
}
}