c# - DataGridView 到文本...Header 和同一行问题的第一行
c# - DataGridView to txt...Header and first row on same line issue
我正在尝试将数据从 datagridview 导出到 .txt table 之类的文件中。
当我导出到 .txt 时,header 也像预期的那样打印在第一行,但 table 的第一行也在该行打印...现在我已经尝试了很多事情,但显然我的逻辑在这里是错误的。
我基本上想要一种方法来将 dataGridView_Excel.Rows.Count - 1; 设置为没有 -1 的正常计数。但是每次我这样做都会抛出一个 Object 引用未设置为 object. 的实例或者如果我尝试增加列数来抵消我获取 索引超出范围。必须是 non-negative 并且小于 collection 的大小。 关于如何做得更好的任何建议?我明白为什么会这样,我解决它的逻辑并不合理,我很困惑。
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 索引的,共有 'count' 行。这一行:
对于 (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 的想法,它让我重回正轨!
我正在尝试将数据从 datagridview 导出到 .txt table 之类的文件中。
当我导出到 .txt 时,header 也像预期的那样打印在第一行,但 table 的第一行也在该行打印...现在我已经尝试了很多事情,但显然我的逻辑在这里是错误的。
我基本上想要一种方法来将 dataGridView_Excel.Rows.Count - 1; 设置为没有 -1 的正常计数。但是每次我这样做都会抛出一个 Object 引用未设置为 object. 的实例或者如果我尝试增加列数来抵消我获取 索引超出范围。必须是 non-negative 并且小于 collection 的大小。 关于如何做得更好的任何建议?我明白为什么会这样,我解决它的逻辑并不合理,我很困惑。
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 索引的,共有 'count' 行。这一行: 对于 (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 的想法,它让我重回正轨!