Строка С# не печатается в той же строке StreamWriter

Следующий код используется мной для печати всего в представлении сетки данных в текстовый файл путем преобразования их в строки! Представление сетки данных имеет 3 столбца (3-й столбец имеет несколько строк), и я хочу напечатать каждую строку представления сетки данных в виде одной строки в текстовом файле!

 private void button1_Click_1(object sender, EventArgs e) // converting data grid value to single string
        {

            String file = " " ;
            for (int i = 0; i < dataGridView2.Rows.Count; i++)
            {
                for (int j = 0; j < dataGridView2.Rows[i].Cells.Count; j++)
                {
                    if (dataGridView2.Rows[i].Cells[j].Value != null)
                    {
                        if (j == 0)
                        {
                            file = Environment.NewLine + file + dataGridView2.Rows[i].Cells[j].Value.ToString();
                        }
                        else
                        {
                            file = file + dataGridView2.Rows[i].Cells[j].Value.ToString();
                        }
                    }


                }



                using (StreamWriter sw = new StreamWriter(@"C:\Users\Desktop\VS\Tfiles\file.txt"))
                {


                    {
                        sw.Write(file);
                    }
                }

            }
        }

Хотя текстовый файл создан, первые 2 столбца и 1-я строка в 3-м столбце печатаются в одной строке, а другие строки 3-го столбца печатаются в новой строке! как я могу получить их на той же линии.

например, пусть примерная строка представления сетки данных будет выглядеть как (aaa) (bbb) (ccc dddd eee), и она должна отображаться в текстовом файле как aaa bbb ccc dddd eee, но из моего кода она выглядит как aaa bbb ccc в той же строке, dddd на новую строку и эээ на другую новую строку! как я могу исправить эту проблему?


person Kushan Peiris    schedule 28.08.2017    source источник
comment
Кажется, вы не хотите, чтобы новая строка в вашем текстовом файле была правильной? Так что просто опустите новую строку в вашем первом цикле?   -  person Capn Jack    schedule 28.08.2017
comment
Позвольте мне убедиться, что я правильно вас понимаю: вы хотите, чтобы все элементы в вашем представлении сетки отображались в текстовом файле в порядке столбцов. Таким образом, добавляются все элементы в столбце 1, затем в той же строке добавляются все элементы из столбца 2 и так далее, верно? Все без новых строк?   -  person Capn Jack    schedule 28.08.2017
comment
да столбец 1 и столбец 2 в порядке! Первая строка столбца 3 также печатается в той же строке! но после этого другие строки столбца 3 печатаются на новой строке!   -  person Kushan Peiris    schedule 28.08.2017
comment
@KushanPeiris кажется, что 3-й столбец содержит новую строку, которая вызывает проблемы. Смотрите мой ответ о том, как использовать StringBuilder и удалить новую строку.   -  person TheVillageIdiot    schedule 28.08.2017


Ответы (2)


Вместо того, чтобы полагаться на j==0, вы можете добавить новую строку вне внутреннего цикла for. Кроме того, чтобы ввести такое количество строковых значений, вы действительно должны использовать StringBuilder. Попробуй это:

private void button1_Click_1(object sender, EventArgs e) // converting data grid value to single string
{

    StringBuilder file = new StringBuilder();
    for (int i = 0; i < dataGridView2.Rows.Count; i++)
    {
        for (int j = 0; j < dataGridView2.Rows[i].Cells.Count; j++)
        {
            var val = dataGridView2.Rows[i].Cells[j].Value;
            if (val == null)
                continue;//IF NULL GO TO NEXT CELL, MAYBE YOU WANT TO PUT EMPTY SPACE
            var s=val.ToString();
            file.Append(s.Replace(Environment.NewLine," "));
        }
        file.AppendLine();//NEXT ROW WILL COME INTO NEXT LINE
    }

    using (StreamWriter sw = new 
                   StreamWriter(@"C:\Users\Desktop\VS\Tfiles\file.txt"))
    {
        sw.Write(file.ToString());
    }   
}

EDIT:- Кажется, третий столбец содержит строки с новой строкой, поэтому мы можем удалить новую строку из строки перед помещением в файл:

var s = val.ToString();
file.Append(s.Replace(Environment.NewLine, " "));
person TheVillageIdiot    schedule 28.08.2017

Попробуй это:

        for (int i = 0; i < dataGridView2.Rows.Count; i++)
        {
            for (int j = 0; j < dataGridView2.Rows[i].Cells.Count; j++)
            {
                if (dataGridView2.Rows[i].Cells[j].Value != null)
                {
                    file = file + dataGridView2.Rows[i].Cells[j].Value.ToString();
                }
            }
person Capn Jack    schedule 28.08.2017
comment
да, но файл+=что-то такое же, как файл=файл+что-то, верно? - person Kushan Peiris; 28.08.2017