В строке, которая включает dgdMain.DataSource = dt;
, я получаю «Исключение NullReferenceException было необработанным». Я попытался найти решение, и я уверен, что это просто, но я явно не понимаю его. Спасибо за любой вклад.«Исключение NullReferenceException было необработанным» при назначении DataTable DataGridView
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Dashboard
{
public partial class frmMain : Form
{
public frmMain()
{
BindingSource bindingSource = new BindingSource();
DataTable dt = Program.GetDataTableFromCSV("../../res/sampledata.csv");
dgdMain.DataSource = dt;
InitializeComponent();
}
}
}
... и вот GetDataTableFromCSV()
:
public static DataTable GetDataTableFromCSV(string path)
{
DataTable dataTable = new DataTable();
String[] values;
values = File.ReadAllLines(path);
string[] csvRows = System.IO.File.ReadAllLines(path);
string[] headers = csvRows[0].Split(',');
// Adding columns name
foreach (var item in headers)
dataTable.Columns.Add(new DataColumn(item));
string[] fields = null;
foreach (string csvRow in csvRows)
{
//Debug.Write(csvRow+"\r\n");
fields = csvRow.Split(',');
DataRow row = dataTable.NewRow();
row.ItemArray = fields;
dataTable.Rows.Add(row);
}
return dataTable;
}
Почему вы создаете BindingSource в конструкторе, который вы никогда не используете? И почему вы выполняете 'File.ReadAllLines (путь)' дважды в GetDataTable ..., ('values' также никогда не используется)? –
** Сначала ** вызовите InitializeComponent() и **, затем ** вы можете использовать dgdMain. –
Кроме того, файлы CSV могут иметь запятые внутри фактических значений и, таким образом, разделение на '', ''не самая лучшая идея. Обратитесь к http://stackoverflow.com/questions/2081418/parsing-csv-files-in-c-sharp – chancea