显示文本文件中特定数量的记录

时间:2019-04-04 00:56:31

标签: c#

将文本文件中的3条记录加载到datagridview中时出现问题。

private void button1_Click(object sender, EventArgs e)
       {
           using (OpenFileDialog ofd = new OpenFileDialog())
           {
               if (ofd.ShowDialog() == DialogResult.OK && radioButton1.Checked)
               {
                   System.IO.StreamReader file = new System.IO.StreamReader(ofd.FileName);
                   string[] columnnames = file.ReadLine().Split('|');
                   List<string> list = new List<string>();
                   DataTable dt = new DataTable();
                   foreach (string c in columnnames)
                   {
                       dt.Columns.Add(c);
                   }
                   string newline;
                   while ((newline = file.ReadLine()) != null)
                   {
                       DataRow dr = dt.NewRow();
                       string[] values = newline.Split('|');
                       for (int i = 0; i < values.Length; i++)
                       {
                           dr[i] = values[i];

                       }

                       dt.Rows.Add(dr);

                   }
                   file.Close();
                   dataGridView1.DataSource = dt;
               }

           }

我试图让某人选择一个单选按钮,例如“显示3条记录”,然后打开一个文本文件。然后它将仅在datagridview中列出3条记录。我可以获取要加载的文件,但不知道如何使其仅显示文本文件中的3条记录。有人可以帮我吗?

2 个答案:

答案 0 :(得分:4)

使用File.ReadLinesTake

var records = File.ReadLines(ofd.FileName).Take(3);

foreach(var record in records)
{
    // do stuff
}

此方法的优点在于ReadLines可以创建一个迭代器,并为StreamReader调用管道并分别读取每一行。与Take结合使用时,它仅读取和加载迭代的内容(在本例中为前3行)。

您可以在此处找到(并遵循)源代码

https://referencesource.microsoft.com/mscorlib/R/d989485a49fbbfd2.html


其他资源

File.ReadLines Method

  

读取文件的行。

Enumerable.Take(IEnumerable, Int32) Method

  

从a的开头返回指定数量的连续元素   顺序。

答案 1 :(得分:1)

您需要计算读取的行数,然后在达到3行时退出读取负载。

int maxLines = 3;
string newline;
while ((newline = file.ReadLine()) != null && --maxLines >= 0)
{
   ....
}