Как избежать нулевых (0) значений при загрузке CSV-файла в DataGrid?

#c# #wpf #csv #datagrid

#c# #wpf #csv-файл #datagrid

Вопрос:

Я работаю с приложением, в котором я загружаю CSV-файл в сетку данных (WPF). Чего я не понимал до того, как начал, так это того, что он содержит нулевые значения, которые меня на самом деле не волнуют, когда дело доходит до отображения. Как я могу добавить проверку в свой код, чтобы он отфильтровывал нулевые значения?

 //location of CSV File
        string CSVDataBase = @"C:covid19_confirmed_global.csv";
 
 //create collection for DataGrid source
        async Task<ICollection> CreateDataSource()
        {
            //create new DataTables and rows
            DataTable dataTable = new DataTable();
            DataRow dataRow;

            //create column headers
            dataTable.Columns.Add(new DataColumn("Country/Region", typeof(string)));
            dataTable.Columns.Add(new DataColumn("Province/State", typeof(string)));
            dataTable.Columns.Add(new DataColumn("Number of Cases", typeof(string)));
            dataTable.Columns.Add(new DataColumn("Confirmed Date", typeof(string)));

            //split lines at delimiter ','
            foreach (string Line in await File.ReadAllLinesAsync(CSVDataBase))
            {
                //create new row
                dataRow = dataTable.NewRow();

                //Country/Region
                dataRow[0] = Line.Split(',').ElementAt(1);

                //Province/State
                dataRow[1] = Line.Split(',').ElementAt(0);

                //Number of Cases
                dataRow[2] = Line.Split(',').ElementAt(2);

                //Confirmed Date 
                dataRow[3] = Line.Split(',').ElementAt(3);                

                //add the row created
                dataTable.Rows.Add(dataRow);
            }

            //return dataview 
            DataView dataView = new DataView(dataTable);
            return dataView;
        }
 
 //button load CSV file
        private async void btnDisplayData_Click(object sender, RoutedEventArgs e)
        {
            CovidInfoDataGrid.ItemsSource = await CreateDataSource();
        }
 

Первые два столбца в DataGrid перевернуты, потому что первый столбец в CSV-файле — это провинция / штат, а второй столбец — Страна / регион. В DataGrid я хочу, чтобы они были противоположными.

Я добавил CSV-файл для лучшего понимания: CSV-файл

Образец с данными, кроме нулей: тот же CSV-файл, но со значимыми данными.

Вот как это должно выглядеть в конце: требуемый результат

Комментарии:

1. Что вы подразумеваете под нулевыми значениями? Пустая строка? или пустая ячейка? Или что именно?

2. Кстати, я не специалист по производительности, но вы разделяете каждую строку 4 раза. Было бы дешевле, если бы вы разделили его только один раз на массив или около того.

3. «Ноль» означает 0, а не «null». Насколько я могу судить, просматривая ячейки визуально, внутри столбцов «Количество обращений» нет пустых «нулевых» ячеек.

4. В названии вопроса указано «null», поэтому я был в замешательстве.

5. Это исправило заголовок. Извините.

Ответ №1:

Не уверен, правильно ли я вас понял, но:

     string[] lines = await File.ReadAllLinesAsync(CSVDataBase);
    string[] dates = lines[0].Split(',');

    for (int i = 1; i < lines.Length; i  )
    {
        string[] cells = lines[i].Split(',');
        for (int j = 2; j < cells.Length; j  )
        {
            if (cells[j] == "0")
            {
                continue;
            }
            dataRow = dataTable.NewRow();
            dataRow[0] = cells[1];
            dataRow[1] = cells[0];
            dataRow[2] = cells[j];
            dataRow[3] = dates[j];
            dataTable.Rows.Add(dataRow);
        }
    }
 

Посмотрите, работает ли это — хотя для этого требуется Linq

Отредактировано… В идеале вы должны проанализировать дату в объект Date и затем передать ее в строку в качестве ячейки даты. Кроме того, порядок строк может быть не таким, как вы указали на скриншоте, но как только он появится в таблице данных, упорядочение по определенному столбцу должно быть простым.

Комментарии:

1. Спасибо, но это выглядит странно: bbcode0.com/full/2021/3/11 /… P.S. У меня был AutoGenerateColumns=»False», в этом и была проблема.

2. Что произойдет, если вы загрузите только 3 или 4 строки?

3. Вот что он показывает сейчас: bbcode0.com/full/2021/3/11 /…

4. Можете ли вы опубликовать несколько строк из вашего CSV-файла?

5. Это есть в оригинальном сообщении внизу.