Добавленная точка серии диаграммы не синхронизирована с осью X

Я пытаюсь нарисовать диаграмму через C # с таблицей в виде картинки. Однако, как вы можете видеть данные формата А4 на дату: 7 и 8/6 должны оставаться с одной и той же осью 7 и 8/6, ненормально здесь все они оставлены до оси 5 и 6/6. Не могли бы вы помочь мне исправить это.

for (int i = 0; i < 14; i++)
        {
            string productname = dataGridView1.Rows[i].Cells[0].Value.ToString();
            string datetime = dataGridView1.Rows[i].Cells[2].Value.ToString();
            int para = Convert.ToInt16(dataGridView1.Rows[i].Cells[1].Value);
            if (chart_dashboard.Series.IndexOf(productname) != -1)
            {
                chart_dashboard.Series[productname].Points.AddXY(datetime, para);
                chart_dashboard.ChartAreas[0].AxisX.Interval = 1;
            }
            else
            {
                chart_dashboard.Series.Add(productname);
                chart_dashboard.Series[productname].Points.AddXY(datetime, para);
                chart_dashboard.ChartAreas[0].AxisX.Interval = 1;
            }
        }

Ответы на вопрос(1)

Решение Вопроса

Распространенная ошибка.

string datetime = dataGridView1.Rows[i].Cells[2].Value.ToString();

Это не верно! Если вы добавляете значения x в виде строк, все они добавляются как0 иSeries не может выровнять их по соответствующим слотам на оси X. Таким образом, они добавляются слева направо последовательно

Вместо этого просто добавьте значения x в качествеDateTimes они должны быть!

Так что еслиCells содержатьDateTime значения использования:

DateTime datetime = (DateTime) dataGridView1.Rows[i].Cells[2].Value;

Если они этого не делают, конвертируйте их вDateTime

DateTime datetime = Convert.ToDateTime(dataGridView1.Rows[i].Cells[2].Value);

Для управления типом значений x установитеXValueType для каждой серии:

chart_dashboard.Series[yourSeries].XValueType = ChartValueType.DateTime;

Чтобы контролировать способ отображения меток осей, установите их форматирование:

chart_dashboard[ChartAreas[0].AxisX.LabelStyle.Format = someDateTimeFormatString;

Чтобы создать строку типа «Неделя 1», вы бы

установитьXValueType вint16добавьте значение x в качестве номера неделиотформатировать как..axis.LabelStyle.Format = "Week #0";

Чтобы извлечь число из ваших данных, разделенных пробелом и Convert.ToInt16!

Если действительно нужно вставить разреженные значения x в виде строк, нужно вставитьфиктивный DataPoint на каждом промежутке в серии.

Создание манекенаDataPoint это просто:

 DataPoint dp = new DataPoint() { IsEmpty = true};

Но зная, где пробелызаблаговременно это вызов! «Лучший» способ - просмотреть данные и заполнить их перед добавлением баллов. Или зайдите позже и вместодобавление, вставка манекены в промежутках. И то, и другое намного сложнее, чем правильно получить данные!

 Jacky Le21 июн. 2016 г., 12:01
Однако, если значение DateTime в виде строки, у нас есть какой-либо метод, чтобы решить эту проблему.
 TaW21 июн. 2016 г., 12:18
Я не понимаю Это был вопрос? Пожалуйста, объясни! (Если вы имели в виду, что делать, если у вас нет даты и времени или числового значения? Тогда вам нужно вставить пустые фиктивные точки для каждого слота, в котором отсутствует точка в серии; для этого вам все равно нужно отслеживать x -значения, которые будут потеряны, если вы не сохраните их каким-либо образом. Одним из мест были бы теги точек данных. Но на самом деле предоставление хороших числовых данных / данных о времени и времени - лучший путь.)
 Jacky Le21 июн. 2016 г., 11:18
Спасибо TaW! он отлично работает с форматом DataTime :)

Ваш ответ на вопрос