【发布时间】:2012-04-14 04:28:42
【问题描述】:
我正在开发一个应用程序,它将我的名为scannerDataGridView 的DataGridView 导出到一个csv 文件。
找到了一些示例代码来执行此操作,但无法使其正常工作。顺便说一句,我的数据网格没有数据绑定到源。
当我尝试使用 Streamwriter 仅写入列标题时,一切顺利,但是当我尝试导出包括数据在内的整个数据网格时,我得到了一个例外。
System.NullReferenceException:对象引用未设置为实例 的一个对象。在 Scanmonitor.Form1.button1_Click(对象发件人, 事件参数 e)
这是我的代码,以下行给出了错误:
dataFromGrid = dataFromGrid + ',' + dataRowObject.Cells[i].Value.ToString();
//csvFileWriter = StreamWriter
//scannerDataGridView = DataGridView
private void button1_Click(object sender, EventArgs e)
{
string CsvFpath = @"C:\scanner\CSV-EXPORT.csv";
try
{
System.IO.StreamWriter csvFileWriter = new StreamWriter(CsvFpath, false);
string columnHeaderText = "";
int countColumn = scannerDataGridView.ColumnCount - 1;
if (countColumn >= 0)
{
columnHeaderText = scannerDataGridView.Columns[0].HeaderText;
}
for (int i = 1; i <= countColumn; i++)
{
columnHeaderText = columnHeaderText + ',' + scannerDataGridView.Columns[i].HeaderText;
}
csvFileWriter.WriteLine(columnHeaderText);
foreach (DataGridViewRow dataRowObject in scannerDataGridView.Rows)
{
if (!dataRowObject.IsNewRow)
{
string dataFromGrid = "";
dataFromGrid = dataRowObject.Cells[0].Value.ToString();
for (int i = 1; i <= countColumn; i++)
{
dataFromGrid = dataFromGrid + ',' + dataRowObject.Cells[i].Value.ToString();
csvFileWriter.WriteLine(dataFromGrid);
}
}
}
csvFileWriter.Flush();
csvFileWriter.Close();
}
catch (Exception exceptionObject)
{
MessageBox.Show(exceptionObject.ToString());
}
【问题讨论】:
-
在哪一行抛出异常?您也可以使用 foreach 来遍历每一行的列:foreach(dataRowObject.Cells 中的 DataGridViewCell 单元格),除非有特定原因您更喜欢正常的 for 循环?
-
也可以检查scannerDataGridView.Rows.Count > 0
-
嗨 PandaNL,我已经删除了我的答案。我仍然认为违规行应该是
object value = dataRowObject.Cells[i].Value; dataFromGrid = dataFromGrid + ',' + (value ?? string.Empty).ToString()); -
在close()之前不需要flush()。 Dispose() 调用 Close() 并调用 flush()。
标签: c# datagridview streamwriter