Моя диаграмма в 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
Диаграмма C# Visual Studio НЕ МОЖЕТ обрабатывать даты в XValue ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение