我使用以下代码将数据网格视图中的条目转换为文本文件! (创建文本文件的过程是成功的)将datagrid视图条目转换为字符串后,我从外部追加一个字符串(这应该出现在文本文件的最后一行)
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
}
file.Append("Hello");
using (StreamWriter sw = new
StreamWriter(@"C:\Users\sachinthad\Desktop\VS\Tfiles\file.txt"))
{
sw.Write(x);
}
}
但是当我检查文本文件时,外部字符串(在这种情况下为“Hello”)出现在最后一行,但上面有一个额外的空格!如何删除这个额外的空间?
答案 0 :(得分:1)
您可以使用string.Join
将字符串集合与其间的分隔符连接起来。与重构它一起使用linq .Select
:
var lines = dataGridView2.Rows.Select(row => string.Join(" ",
row.Cells.Select(cell => cell.Value).Where(val => val != null));
当然,您也可以在整个行集合中使用它来将它们与新行连接起来:
// Will eliminate problem of extra \n at the end
var result = string.Join(Environment.NewLine, lines);
如果您更喜欢使用循环而不是linq,那么您可以在内部循环中执行的操作是将值添加到外部循环中初始化的List<string>
。内循环结束后,对该列表的值使用string.Join
。 Psudocode:
for each row:
List<string> items = new List<string>();
for each column in row:
items.Add(value of column);
file.Append(string.Join(" ", items));