将 CSV 文件加载到 DataGrid 时如何避免零 (0) 值?

How to avoid zero (0) values when loading a CSV file into DataGrid?

我正在使用一个应用程序将 CSV 文件加载到 DataGrid(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 文件中的第一列是 Province/State,第二列是 Country/Region。在 DataGrid 中,我希望它们是相反的。

我添加了 CSV 文件以便更好地理解: CSV file

除零以外的数据示例: The same CSV file but with meaningful data.

最后应该是这样的: The required result

不确定我是否理解正确但是:

    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 对象,然后将其作为日期单元格传递给行。 此外,行的顺序可能与您在屏幕截图中指示的不同,但一旦将其放入数据表中,根据特定列进行排序应该很容易。