У меня есть база данных MsSql, которая вычисляет промежуток времени между двумя датами в секундах. Это прекрасно работает. Затем я использую этот столбец в C# и записываю их в массив.Преобразование секунд в hhh: mm: ss в диаграмме
Этот массив является входом для диаграммы позже. До сих пор это хорошо работает, но я не могу найти способ отображения секунд в формате, таком как hhh: mm: ss, поскольку период времени может быть больше 24 часов.
Я пробовал ChartArea.AxisY.LabelStyle.Format = "hhmmss"; но это не работает вообще.
Есть ли у кого-нибудь идеи, как я мог это сделать?
EDIT: добавить данные таким образом:
chart2.Series.Clear();
chart2.ChartAreas.Clear();
Series BoxPlotSeries = new Series();
ChartArea ChartArea2 = new ChartArea();
ChartArea ChartArea3 = new ChartArea();
chart2.ChartAreas.Add(ChartArea2);
chart2.ChartAreas.Add(ChartArea3);
ChartArea2.Name = "Data Chart Area";
ChartArea3.Name = "BoxPlotArea";
BoxPlotSeries.Name = "BoxPlotSeries";
BoxPlotSeries.ChartType = SeriesChartType.BoxPlot;
BoxPlotSeries.ChartArea = "BoxPlotArea";
chart2.Series.Add(BoxPlotSeries);
Series Input1 = new Series();
Input1.Name = "Input1";
Input1.ChartType = SeriesChartType.Point;
Input1.ChartArea = "Data Chart Area";
chart2.Series.Add(Input1);
chart2.Series["Input1"].Points.DataBindY(InputArray);
chart2.ChartAreas["BoxPlotArea"].AxisX.CustomLabels.Add(2, 0.0, "BoxPlot1");
chart2.Series["BoxPlotSeries"]["BoxPlotSeries"] = "Input1";
chart2.Series["BoxPlotSeries"]["BoxPlotShowMedian"] = "true";
chart2.Series["BoxPlotSeries"]["BoxPlotShowUnusualValues"] = "false";
chart2.Series["BoxPlotSeries"]["PointWidth"] = "0.5";
chart2.Series["BoxPlotSeries"].IsValueShownAsLabel = false;
ChartArea2.Visible = false;
ChartArea3.BackColor = Color.FromArgb(224,224,224);
//I tried to format it this way but it didn't work
//ChartArea3.AxisY.LabelStyle.Format = "{0:HHHmmss}";
chart2.ChartAreas["BoxPlotArea"].AxisX.LabelStyle.Angle = -90;
EDIT2: А вот как я заселить входного массива
int[] InputArray = new int[1000000];
int c = 0;
con.Open();
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
int n;
if (int.TryParse(dr[0].ToString(),out n) == true)
{
InputArray[c] = Convert.ToInt32(dr[0].ToString());
c++;
}
}
}
if (c == 0) { c = 1; }
Array.Resize(ref InputArray, c - 1);
EDIT 3: The Boxplot должен выглядеть следующим образом:
В Excel формат для отображения часов больше, чем 24 называется "[ч]: мм: сс; @"
EDIT4:
Благодаря @TAW я почти удалось решить мой проблема. Я сделал некоторые изменения в его решение и пришел с этим:
В блоке диаграммы кода:
Значение «Макс» установлен ранее.
ChartArea3.AxisY.MajorTickMark.Interval = addCustomLabels(ChartArea3, BoxPlotSeries, 60 * 60, max);
int addCustomLabels(ChartArea ca, Series series, int interval, int max)
{
int tickNo = 0;
ca.AxisY.CustomLabels.Clear();
if(max/interval > 10)
{
interval = (max/10) - (max/10) % (60*30);
tickNo = (max/10) - (max/10) % (60*30);
}
if (max/interval <= 2)
{
interval = (max/4) - (max/4) % (60 * 15);
tickNo = (max/4) - (max/4) % (60 * 15);
}
for (int i = 0; i < max; i += interval)
{
CustomLabel cl = new CustomLabel();
cl.FromPosition = i - interval/2;
cl.ToPosition = i + interval/2;
cl.Text = hhh_mm_ss(i);
ca.AxisY.CustomLabels.Add(cl);
}
return tickNo;
}
Моя проблема в настоящее время, что иногда нет оси Lable (кроме 0:00) не отображается, даже если код проходит через него без каких-либо проблем.
Есть ли кто-нибудь и идея, что может быть неправильным?
Какую схему вы используете? –
Диаграмма Boxplot – FriendlyGuy
Что такое структура пользовательского интерфейса и каково полное имя используемого вами типа? –