0

我正在尝试将数据从datagridview导出到.txt的排序表中。c# - DataGridView to txt ...在同一行问题上的标题和第一行

当我导出到.txt时,标题会在第一行打印,就像它应该也是这样,但表格的第一行也在该行上打印......现在我尝试了许多事情,但是,显然我的逻辑在这里是非常错误的。

我基本上想要一种方法来设置dataGridView_Excel.Rows.Count - 1;只是没有-1的正常计数。但每次我都会抛出一个对象引用未设置为对象的实例。或者如果我尝试增加列数来抵消,我得到一个指数超出范围。必须是非负数且小于集合的大小。关于如何做得更好的建议?我明白为什么会发生这种情况,我的解决方案的逻辑是不健全的,而且我不会感到困惑。

if (save.ShowDialog() == DialogResult.OK) 
     { 
      TextWriter writer = new StreamWriter(save.OpenFile()); 

      int i2 = 0; 
      while (i2 < 19) 
      { 
       writer.Write(dataGridView_Excel.Columns[i2].HeaderText + "\t  " + "|"); 
       i2++; 
      } 

      for (int i = 0; i < dataGridView_Excel.Rows.Count - 1; i++) 
      {          
       for (int j = 0; j < dataGridView_Excel.Columns.Count; j++) 
       { 
        writer.Write("\t" + dataGridView_Excel.Rows[i].Cells[j].Value.ToString() + "\t  " + "|"); 

       } 

       writer.WriteLine(""); 
       writer.WriteLine("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); 
      } 
      writer.Close(); 
      MessageBox.Show("Data Exported"); 

回答

0

您的DataGridView是0索引,并有'总计'行。这行: for(int i = 0; i < dataGridView_Excel.Rows.Count - 1; i ++)

将从零开始并转到((行数-1)-1),因为它是<:小于。

尝试:

for (int i = 0; i <= dataGridView_Excel.Rows.Count - 1; i++) 

即在添加等号(=),或:

for (int i = 0; i < dataGridView_Excel.Rows.Count; i++) 

除非我误解你的问题。这个问题是循环的吗,还是让事情在新的行上写?

为了得到它写一个新的生产线,尝试添加Environment.NewLine到最后:

writer.Write("\t" + dataGridView_Excel.Rows[i].Cells[j].Value.ToString() + "\t  " + "|" + Environment.NewLine); 
+0

当我<=或I去除-1完全我得到的**对象引用不设置为一个对象**的一个实例,因为行的数目不再少于列数并且它们变得相等。这里是我的问题的图片:[链接](http://i.imgur.com/WuSzwgv.jpg)[链接](http://i.imgur.com/4LkRKmH.jpg)[链接](http:/ /i.imgur.com/sHKpbq4.jpg)[link](http://i.imgur.com/ppg0P4v.jpg)所以我的标题行和datagridview的第一行合并在一起导出为.txt。我已经尝试了你的建议,但它不起作用。 – CAlex

+0

感谢您提供Newline的建议和回复! – CAlex

0

的看着过长和分心的东西只是一个案例......哎呀

这里是最简单的方法:

if (save.ShowDialog() == DialogResult.OK) 
     { 
      TextWriter writer = new StreamWriter(save.OpenFile()); 

      int i2 = 0; 
      while (i2 < 20) 
      { 
       writer.Write(dataGridView_Excel.Columns[i2].HeaderText + "\t  " + "|"); 
       i2++; 
      } 

      writer.Write(Environment.NewLine); 
      writer.WriteLine("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); 

      for (int i = 0; i < dataGridView_Excel.Rows.Count - 1; i++) 
      {          
       for (int j = 0; j < dataGridView_Excel.Columns.Count; j++) 
       { 
        writer.Write("\t" + dataGridView_Excel.Rows[i].Cells[j].Value.ToString() + "\t  " + "|"); 

       } 

       writer.WriteLine(""); 
       writer.WriteLine("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); 
      } 
      writer.Close(); 
      MessageBox.Show("Data Exported"); 
     } 

我刚刚在循环前添加了一个Environment.NewLine和my ---- divider。我在主for循环之外的while循环中将Header添加到文件的全部原因是为了方便地更改为.txt格式。感谢您的想法@ainwood它让我回到正轨!

Before

After!