Диаграмма C# Visual Studio НЕ МОЖЕТ обрабатывать даты в XValueC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Диаграмма C# Visual Studio НЕ МОЖЕТ обрабатывать даты в XValue

Сообщение Anonymous »

Моя диаграмма в Microsoft Forms в Visual Studio не может отображать даты в правильном формате. Когда вы помещаете целые числа, это работает отлично, но числа, отформатированные так, чтобы они выглядели как даты, не работают.
Это моя таблица в sqlite с pd_data как целыми числами.
CREATE TABLE producao(
pd_pr_codigo INTEGER,
pd_data INTEGER,
pd_codigo INTEGER,
pd_qtd_produzida REAL,
PRIMARY KEY (pd_pr_codigo, pd_codigo, pd_data)
FOREING KEY (pd_pr_codigo) REFERENCES produtos(pr_codigo)

это мой код:
private void BtProdBlocos_Click(object sender, EventArgs e)
{
try
{
string sql = "SELECT pd_data, pd_qtd_produzida FROM producao";
SqliteParameter[] emptyparameter = new SqliteParameter[]{ };
chart1.DataSource = Funcoes.Cursor(sql, emptyparameter);

chart1.Series["Producao"].XValueMember = "pd_data";
chart1.Series["Producao"].YValueMembers = "pd_qtd_produzida";

chart1.DataBind();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

А это график, значения целых чисел X, соответствующие датам 2024/10/22 и 2024/10/23.
теперь, используя pd_data в качестве текста и помещая даты типа дд/мм/гггг в sql:
CREATE TABLE producao(
pd_pr_codigo INTEGER,
pd_data TEXT,
pd_codigo INTEGER,
pd_qtd_produzida REAL,
PRIMARY KEY (pd_pr_codigo, pd_codigo, pd_data)
FOREING KEY (pd_pr_codigo) REFERENCES produtos(pr_codigo)

при одинаковых датах и ​​одном и том же коде появляется только 1 дата, и что бы я ни делал и не пробовал. Я. НЕТ. ДОСТИЖЕНО. УСТАНОВИТЬ.
столбцы таблицы с датами есть.
Отладил код и пришел к выводу, что все даты приходят , они по какой-то причине просто не отображаются на диаграмме правильно. Кроме того, Funcoes.cursor — это подключение к базе данных. Я отправляю запрос sql через эту функцию, и она возвращает все значения.
РЕДАКТИРОВАТЬ: мне удалось найти решение. Значение X должно иметь тип datetime в C#, чтобы его можно было правильно понять. Поскольку в SQLite нет собственного типа datetime, решением было перенести оба значения в DataTable и внутри него преобразовать значения pd_data и pd_qtd_quantidade в datetime и double соответственно. В коде я также отформатировал ось X так, чтобы она отображалась под углом 45 градусов для лучшей читаемости, и она будет отображать только первое и последнее значения как необязательные. Единственное, что мне не удалось изменить, это то, что если между датами есть пробел, то программа его заполняет (например: с 11.10.2024 по 13.10.2024, на графике будет добавлено 12.10.2024). 2024 между ними, даже без значения Y), что лично мне не понравилось и я хотел бы изменить, хотя решения для этого я пока не нашел. Надеюсь, это тоже кому-то поможет!
Вот код:
private void BtProdBlocos_Click(object sender, EventArgs e)
{
string comandosql = "SELECT pd_data, pd_qtd_produzida FROM producao";
SqliteParameter[] parametrovazio = new SqliteParameter[] { };
DataTable dataTable = Funcoes.Cursor(comandosql, parametrovazio);

// Check if the chart has the correct series
if (chart1.Series.Count == 0)
{
chart1.Series.Add("Producao");
}

// Configure the series
chart1.Series["Producao"].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime;
chart1.Series["Producao"].YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;

// Clear previous data (if any)
chart1.Series["Producao"].Points.Clear();

// Add points to the chart
foreach (DataRow row in dataTable.Rows)
{
DateTime data = Convert.ToDateTime(row["pd_data"]);
double quantidadeProduzida = Convert.ToDouble(row["pd_qtd_produzida"]);

// Add the point (date, quantity) to the series
chart1.Series["Producao"].Points.AddXY(data, quantidadeProduzida);
}

// Set the X axis label format to display only day and month
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "dd/MM/yyyy";

// Set the angle of the labels on the X axis
chart1.ChartAreas[0].AxisX.LabelStyle.Angle = -45;

// Set the interval for the X axis labels (here set to 1 day)
chart1.ChartAreas[0].AxisX.Interval = 1;
chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Days;

// Optional: Force the X axis boundary to start and end at the exact dates
chart1.ChartAreas[0].AxisX.Minimum = chart1.Series["Producao"].Points[0].XValue;
chart1.ChartAreas[0].AxisX.Maximum = chart1.Series["Producao"].Points[chart1.Series["Producao"].Points.Count - 1].XValue;

// Refresh the chart
chart1.Invalidate();
}



Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-xvalue
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Диаграмма C# Visual Studio НЕ МОЖЕТ обрабатывать даты в XValue
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Проблема с обработкой даты в C# Visual Studio Chart XValue
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Что такое rvalue, lvalue, xvalue, glvalue и prvalues?
    Anonymous » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Что такое rvalue, lvalue, xvalue, glvalue и prvalues?
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Почему член выражения объекта - это xvalue, а не Prvalue?
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»