【问题标题】:looping through file to add to datagridview循环文件以添加到datagridview
【发布时间】:2019-05-11 19:04:02
【问题描述】:

我正在尝试以 Windows 形式在表格中显示数据。我还不知道如何使用数据库,所以我尝试使用读入数组的文件来填充 DataGridView。 当我运行程序时,数据从第二列开始,而不是第一列。并且每一行都重复相同的数据。

我愿意以不同的方式执行此操作,但我无法理解我遇到的许多其他方法。我是初学者,所以我需要一个简单的解决方案或非常详细的解释,以便我真正理解代码在做什么。

  private void buttonAllOrders_Click(object sender, EventArgs e)
    {
        // call method to read file
        string[] allLines = ReadFile();
        // add columns
        dataGridView1.Columns.Add("DateColumn", "Date");
        dataGridView1.Columns.Add("LemonColumn", "Lemon");
        dataGridView1.Columns.Add("TrefoilColumn", "Trefoils");
        dataGridView1.Columns.Add("DSDColumn", "Do-Si-Dos");
        dataGridView1.Columns.Add("SamoasColumn", "Samoas");
        dataGridView1.Columns.Add("TagsColumn", "Tagalongs");
        dataGridView1.Columns.Add("ThinMintsColumn", "Thin Mints");

        // loop through array to populate each row
        for (int i = 0; i < allLines.Length; i++)
        {
            dataGridView1.Rows.Add(allLines[0], allLines[1], allLines[2], allLines[3], allLines[4],
                allLines[5], allLines[6], allLines[7] );
        }

【问题讨论】:

  • 文件长什么样?
  • 重复相同的数据,因为您在每次迭代时引用数组中的相同元素。你永远不会在循环中使用 i。
  • 将数据读入一个集合并将该集合用作数据源是最简单的方法。
  • 变量string[] allLines获取数据后...allLines[0]长什么样子?

标签: c# .net winforms for-loop datagridview


【解决方案1】:

您的循环当前仅使用“allLines”数组的前 8 个元素创建新行。

你可能想做这样的事情。

for (int i = 0; i < allLines.Length; i += 8)
{
    dataGridView1.Rows.Add(allLines[i], allLines[i + 1], allLines[i + 2], 
    allLines[i + 3], allLines[i + 4], allLines[i + 5], allLines[i + 6], allLines[i + 7]);
}

在这里,我将增量从i++ 更改为i += 8,并在每次循环运行时以这种方式将该索引添加到数组调用中,它将获得接下来的 8 个项目。这应该可以解决您在每一行中都有相同数据的问题。

由于我不知道您的文件中有什么,我无法告诉您为什么信息从第二列开始。

【讨论】:

  • 谢谢,里德。你的解释帮助我理解了发生了什么。现在它从第一列开始
【解决方案2】:

与 Reed 的想法相同,只是打字少了一点,我认为 Reed 将不在列中。您的代码显示 7 列。

private void OPCode()
    {
        dataGridView1.Columns.Add("DateColumn", "Date");
        dataGridView1.Columns.Add("LemonColumn", "Lemon");
        dataGridView1.Columns.Add("TrefoilColumn", "Trefoils");
        dataGridView1.Columns.Add("DSDColumn", "Do-Si-Dos");
        dataGridView1.Columns.Add("SamoasColumn", "Samoas");
        dataGridView1.Columns.Add("TagsColumn", "Tagalongs");
        dataGridView1.Columns.Add("ThinMintsColumn", "Thin Mints");

        string[] alllines = File.ReadAllLines("Path to file");
        //Create an array to hold values for the row
        string[] row = new string[7];
        //loop through all the lines in the file but step by 7
        //because we will use the lines inbetween to populate each row
        for (int i = 0; i < alllines.Count(); i += 7)
        {
            for (int x = 0; x < 7; x++)
            {
                row[x] = alllines[x + i];
            }
            dataGridView1.Rows.Add(row);
        }
    }

【讨论】:

  • @JohnG 我确实测试了这段代码,但我猜我使用的文件甚至出来了。仅在单个文件上测试。我会检查更多并修复代码。谢谢。
  • 代码对我来说崩溃了...... OP 缺少变量 allLines“包含”的内容。我猜是一个 CSV 字符串。在代码中添加if (x + i &lt; alllines.Count()) { ... 应该可以防止它崩溃,但是,恕我直言,代码并没有按照 OP 的要求进行操作。 OP 需要澄清每个字符串中的内容。
  • 谢谢。这段代码在我的程序中确实有效,代码中的 cmets 对我有帮助。
  • @Dani 我很高兴您的代码可以正常工作,但是如果您的文本文件有多余的行,请注意 JohnG 的评论,我的代码将无法正常工作。
  • John,它实际上是在做我想做的事——每个字符串都包含每种口味的日期和数量。我想在相应的列中打印日期和每个数量。
猜你喜欢
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2016-09-04
  • 2017-08-25
  • 2014-08-25
  • 1970-01-01
相关资源
最近更新 更多