从CSV文件中读取数据

时间:2017-11-03 23:15:01

标签: c# wpf csv

我希望存储带有两个列的CSV文件中的值,我有以下类ReadFromCSV处理CSV文件的读取但是我很难使用此列表显示内容一旦按钮是点击。我必须阅读CSV文件的代码如下;

namespace ELMFS
{
    public class ReadFromCSV
    {
        static void ReadCSV(string[] args)
        {
            List<TextSpeak> TxtSpk = File.ReadAllLines(@"C:\textwords.csv")
                .Skip(1)
                .Select(t => TextSpeak.FromCsv(t))
                .ToList();
        }
    }
    public class TextSpeak
    {
        string Abreviated;
        string Expanded;


        public static TextSpeak FromCsv(string csvLine)
        {
            string[] TxtSpk = csvLine.Split(',');
            TextSpeak textSpeak = new TextSpeak();
            textSpeak.Abreviated = TxtSpk[0];
            textSpeak.Expanded = TxtSpk[1];
            return textSpeak;
        }
    }
}

我正在尝试在消息框中显示textSpeak.Abreviated,但似乎无法从WPF window访问它。

如何在应用程序的其他窗口中使用此列表?

任何建议都将不胜感激!

提前致谢!

2 个答案:

答案 0 :(得分:1)

首先,ReadCSV方法应该返回生成的List对象(或者你不能在其他地方使用该列表)。

其次,TextSpeak类应具有属性,以便您可以在类外部访问其成员变量。

即。这样的事情应该有效:

namespace ELMFS
{
    public class ReadFromCSV
    {
        public static List<TextSpeak> ReadCSV(string[] args)
        {
            List<TextSpeak> TxtSpk = File.ReadAllLines(@"C:\textwords.csv")
                .Skip(1)
                .Select(t => TextSpeak.FromCsv(t))
                .ToList();
            return TxtSpk;
        }
    }
    public class TextSpeak
    {
        public string Abreviated { get; private set; }
        public string Expanded { get; private set; }


        public static TextSpeak FromCsv(string csvLine)
        {
            string[] TxtSpk = csvLine.Split(',');
            TextSpeak textSpeak = new TextSpeak();
            textSpeak.Abreviated = TxtSpk[0];
            textSpeak.Expanded = TxtSpk[1];
            return textSpeak;
        }
    }
}

答案 1 :(得分:0)

private void Display(int count)
        {

            textBox1.Text = "";
            for (int i = 0; i <= count ; i++)
            {
                textBox1.Text += ((dataGridView1.Rows[i].Cells[1].Value).ToString()) +  (dataGridView1.Rows[i].Cells[2].Value.ToString()) + Environment.NewLine;

            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {

                // your code here 

                string CSVFilePathName =Path.GetDirectoryName(Application.ExecutablePath).Replace(@"\bin\Debug", @"\NewFolder1\TEST.csv");
                string[] Lines = File.ReadAllLines(CSVFilePathName);
                string[] Fields;
                Fields = Lines[0].Split(new char[] { ',' });
                int Cols = Fields.GetLength(0);
                DataTable dt = new DataTable();
                //1st row must be column names; force lower case to ensure matching later on.
                for (int i = 0; i < Cols; i++)
                    dt.Columns.Add(Fields[i].ToLower(), typeof(string));
                DataRow Row;
                for (int i = 1; i < Lines.GetLength(0); i++)
                {
                    Fields = Lines[i].Split(new char[] { ',' });
                    Row = dt.NewRow();
                    for (int f = 0; f < Cols; f++)
                        Row[f] = Fields[f];
                    dt.Rows.Add(Row);
                }
                dataGridView1.DataSource = dt;

                int count = 0;

                if (dataGridView1.RowCount > 0)
                {

                    count = dataGridView1.Rows.Count;
                }


                buttons  = new Button[count];
                for (int i = 0; i <count; i++)
                {
                    buttons[i] = new Button();
                    buttons[i].Name = "buttons_Click" + i.ToString();
                    buttons[i].Text = "Click";
                    buttons[i].Click += new EventHandler(buttons_Click);
                    this.Controls.Add(buttons[i]);
                    buttons[i].Visible = false;
                }

                buttons[0].Visible = true;
               // buttons[1].Visible = true;

            }


            catch (Exception ex)
            {
                MessageBox.Show("Error is " + ex.ToString());
                throw;
            }
        }
        private void buttons_Click(object sender, EventArgs e)
        {
            int count = dataGridView1.Rows.Count-1;
            if(c <= count)
            {

                if (buttons[c].Name == "buttons_Click" + c.ToString())
                {
                    buttons[c].Visible = false;
                    int j = c;
                    Display(j);
                    if (c != count)
                    {

                        c = c + 1;
                        buttons[c].Visible = true;
                    }

                }

            }
            if (c == count)
            {
                buttons[0].Visible = true;
            }
        }
    }
}