簡體   English   中英

c#-將DataGridView轉換為txt…同一行問題上的標題和第一行

[英]c# - DataGridView to txt…Header and first row on same line issue

我試圖將數據從datagridview導出到各種.txt表中。

當我導出到.txt文件時,標頭也應該在第一行上打印,但是表的第一行也在該行上打印...現在我已經嘗試了很多方法,但是顯然我的邏輯是這里非常錯誤。

我基本上想要一種方法來設置dataGridView_Excel.Rows.Count-1; 到沒有-1的正常計數。 但是每次我這樣做時,都會拋出一個未設置為對象實例的Object引用。 或者,如果我嘗試增加列數以抵消我得到的索引超出范圍。 必須為非負數並且小於集合的大小。 關於如何做得更好的任何建議? 我了解為什么會發生這種情況,但我解決該問題的邏輯並不健全,而且我很困惑。

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");

您的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);

只是看東西太長而分心的情況...糟糕

這是解決此問題的最簡單方法:

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和----分隔符。 我在主for循環之外的while循環中將Header添加到文件的全部原因是為了輕松地將其更改為.txt格式。 謝謝@ainwood的想法,它使我重回正軌!

之前

后!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM