В настоящее время я читаю данные из файла CSV и показываю их в текстовом поле в одной форме. Затем я собираюсь передать эти данные в другую форму, где я смогу создать визуализацию в виде столбчатой диаграммы, где этническая принадлежность — это значение X, а почасовая заработная плата — это значение Y. Я попытался включить поле со списком, в котором пользователь может выбрать год для фильтрации диаграммы.
ПРОБЛЕМА: Я НЕ МОГУ ПОЛУЧИТЬ БОЛЬШЕ ОДНОГО ПОЛОСКА НА Гистограмме, ДАЖЕ ВО ВРЕМЯ ОТЛАДКИ. В НАЛИЧИИ ВСЕ 10 ТОВАРОВ. НА ДИАГРАММЕ ПОКАЗЫВАЕТСЯ ПЕРВАЯ ЭТНИЧЕСКАЯ ПРИНАДЛЕЖНОСТЬ, «АЗИАТСКАЯ», ЗАТЕМ ЗАПЛАТА, ТАК КАК Я ХОЧУ, ЧТОБЫ ПОКАЗЫВАЛИ ВСЕ 10 ЭТНИЧЕСКИХ ПРИНАДЛЕЖНОСТЕЙ.
Я пробовал много способов создания и заполнения диаграммы, но у меня ничего не получилось. не повезло, ребята, можете ли вы дать какие-нибудь предложения, пожалуйста? (Я стараюсь сделать код максимально простым, он не обязательно должен быть самого высокого стандарта)
Это первая форма, в которой я читаю CSV и сохраняю данных, у меня также есть возможность отображать данные в текстовом поле.
namespace AS2_U17_5th
{
public partial class Form1 : Form
{
// Declaring datalist at the class level
public static List datalist = new List();
public Form1()
{
InitializeComponent();
ReadDataFromCSV();
}
private void button1_Click(object sender, EventArgs e)
{
// call the display data function
LoadDataIntoListBox();
}
// Removed the redundant declaration of datalist here
public void LoadDataIntoListBox()
{
try
{
foreach (DataItems d in datalist)
{
TBData.AppendText($"{d.Year} {d.Ethnicity} {d.HourlyWage}\r\n");
}
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred while loading data into the ListBox {ex.Message}");
}
}
// Method to read data from CSV file
public static void ReadDataFromCSV()
{
try
{
using (StreamReader streamReader = new StreamReader("average-hourly-pay.csv"))
{
// Skip header line
streamReader.ReadLine();
// Looping over remaining lines
while (!streamReader.EndOfStream)
{
string line = streamReader.ReadLine();
string[] data = line.Split(',');
// Parsing data
int year;
if (!int.TryParse(data[0], out year))
{
// Log error and continue to next line
continue;
}
string ethnicity = data[1];
double hourlyWage;
if (!double.TryParse(data[2], out hourlyWage))
{
// Log error and continue to next line
continue;
}
// make a new object
DataItems item = new DataItems
{
Year = year,
Ethnicity = ethnicity,
HourlyWage = hourlyWage
};
// add to list
datalist.Add(item);
}
}
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred while reading the CSV file: {ex.Message}");
}
}
// Ignore this code
private void LBLStatus_Click(object sender, EventArgs e)
{
}
private void BTNVisualise_Click(object sender, EventArgs e)
{
Visualiser CHART = new Visualiser(datalist);
CHART.Show();
this.Enabled = false;
}
}
}
Это еще одна страница, на которой я использую данные и пытаюсь создать диаграмму, используя поле со списком, чтобы пользователь мог фильтровать информацию по годам.using System.Data;
using System.Windows.Forms.DataVisualization.Charting;
namespace AS2_U17_5th
{
public partial class Visualiser : Form
{
private List datalist;
public Visualiser(List datalist)
{
InitializeComponent();
this.datalist = datalist;
// Puts the year in the combobox if anything breaks this should be n1
CBType.DataSource = datalist.Select(item => item.Year).Distinct().ToList();
// Setting the primary data type to take from the combobox
//CBType.SelectedIndex = 0;
// Creates the chart
LoadChartMethod();
}
public void LoadChartMethod()
{
CHRTVisualisation.Series.Clear();
CHRTVisualisation.Series.Add("HourlyWage");
//Get the seelected year from the Combobox
int selectedYear = (int)CBType.SelectedItem;
// Filter the datalist based on the selected year
List filteredData = datalist.Where(item => item.Year == selectedYear).ToList();
foreach (var item in filteredData)
{
// Add a data point to the chart
CHRTVisualisation.Series["HourlyWage"].Points.AddXY(item.Ethnicity, item.HourlyWage);
}
// Set the labels and the title for the chart
CHRTVisualisation.ChartAreas[0].AxisX.Interval = 1;
CHRTVisualisation.Titles.Clear();
CHRTVisualisation.Titles.Add($"Hourly Wages by Ethnicity - Year {selectedYear}");
CHRTVisualisation.ChartAreas[0].AxisX.Title = "Ethnicity";
CHRTVisualisation.ChartAreas[0].AxisY.Title = "Hourly Wage";
}
private void CBType_SelectedIndexChanged(object sender, EventArgs e)
{
LoadChartMethod();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... rom-a-file
Я пытаюсь создать приложение в .NetForms, где я читаю данные из файла, а затем использую эти данные для усечения диаграм ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Возвращать данные в основную программу из очереди, которую я читаю в отдельных процессах
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Возвращать данные в основную программу из очереди, которую я читаю в отдельных процессах
Anonymous » » в форуме Python - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Возвращать данные в основную программу из очереди, которую я читаю в отдельных процессах
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-