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!

相關問題