C# WPF read a .txt file line by line and store it to listview with GridViewColumn

3 min read 07-10-2024
C# WPF read a .txt file line by line and store it to listview with GridViewColumn


Reading a Text File Line by Line and Displaying in a WPF ListView with GridViewColumn

This article explores how to read data from a text file line by line and display it in a WPF ListView with custom columns using GridViewColumn. This technique is useful for displaying structured data from a text file in a user-friendly way.

Scenario:

Imagine you have a text file containing information about products, each line representing a product with its name, price, and description separated by a delimiter. You want to display this data in a ListView in your WPF application, organized in columns for better readability.

Original Code Example:

using System;
using System.Collections.Generic;
using System.IO;
using System.Windows;
using System.Windows.Controls;

namespace ReadTextFileToListView
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // Specify the file path
            string filePath = @"C:\data\products.txt";

            // Read the file and display the data in the ListView
            ReadAndDisplayFile(filePath);
        }

        private void ReadAndDisplayFile(string filePath)
        {
            try
            {
                // Create a list to store the data
                List<string[]> productData = new List<string[]>();

                // Read the file line by line
                using (StreamReader reader = new StreamReader(filePath))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        // Split the line based on the delimiter
                        string[] data = line.Split(',');
                        productData.Add(data);
                    }
                }

                // Create the columns for the ListView
                GridViewColumn nameColumn = new GridViewColumn();
                nameColumn.Header = "Name";
                nameColumn.DisplayMemberBinding = new Binding("[0]");
                nameColumn.Width = 150;

                GridViewColumn priceColumn = new GridViewColumn();
                priceColumn.Header = "Price";
                priceColumn.DisplayMemberBinding = new Binding("[1]");
                priceColumn.Width = 100;

                GridViewColumn descriptionColumn = new GridViewColumn();
                descriptionColumn.Header = "Description";
                descriptionColumn.DisplayMemberBinding = new Binding("[2]");
                descriptionColumn.Width = 200;

                // Create the GridView and add the columns
                GridView gridView = new GridView();
                gridView.Columns.Add(nameColumn);
                gridView.Columns.Add(priceColumn);
                gridView.Columns.Add(descriptionColumn);

                // Set the GridView as the View for the ListView
                listView.View = gridView;

                // Bind the data to the ListView
                listView.ItemsSource = productData;
            }
            catch (Exception ex)
            {
                MessageBox.Show({{content}}quot;Error reading file: {ex.Message}");
            }
        }
    }
}

Breakdown:

  1. File Reading: The code uses StreamReader to open and read the text file line by line. Each line is then split into an array of strings based on a delimiter (in this case, a comma).
  2. Data Storage: The data for each product is stored as an array of strings within a list productData.
  3. ListView Columns: GridViewColumn objects are created and configured with headers and display member bindings. The DisplayMemberBinding specifies the index within the data array that should be displayed in the column.
  4. ListView View: A GridView is created and the columns are added to it. The GridView is set as the View for the ListView.
  5. Data Binding: The productData list is assigned to the ItemsSource of the ListView, binding the data to the UI.

Additional Insights:

  • Error Handling: The code includes a try-catch block to handle potential exceptions during file reading.
  • Data Types: If your data contains numeric or date values, you should consider converting them to the appropriate data types before displaying them in the ListView.
  • Data Validation: You can add data validation to ensure the data is in the expected format before adding it to the list.
  • Custom Column Formatting: GridViewColumn supports custom formatting for the data display. You can use Binding.StringFormat to control how data is displayed in the ListView.

Conclusion:

Reading a text file line by line and displaying it in a WPF ListView with GridViewColumn offers a structured and user-friendly way to present data from text files. By understanding the code and its components, you can easily adapt it to display data from your own text files.

Further Exploration: