Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;“未处理NullReferenceException”;将DataTable分配给DataGridView时_C#_Visual Studio 2010_Datagridview - Fatal编程技术网

C# &引用;“未处理NullReferenceException”;将DataTable分配给DataGridView时

C# &引用;“未处理NullReferenceException”;将DataTable分配给DataGridView时,c#,visual-studio-2010,datagridview,C#,Visual Studio 2010,Datagridview,在包含dgdMain.DataSource=dt的行上,我收到一个“NullReferenceException未处理”错误。我试图找到一个解决方案,我相信它很简单,但我显然错过了它。谢谢你的意见 使用系统; 使用System.Collections.Generic; 使用系统组件模型; 使用系统数据; 使用System.Data.OleDb; 使用系统诊断; 使用系统图; 使用System.IO; 使用System.Linq; 使用系统文本; 使用System.Windows.Forms; 命

在包含
dgdMain.DataSource=dt的行上,我收到一个“NullReferenceException未处理”错误。我试图找到一个解决方案,我相信它很简单,但我显然错过了它。谢谢你的意见

使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用System.Data.OleDb;
使用系统诊断;
使用系统图;
使用System.IO;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
命名空间仪表板
{
公共部分类名称:表单
{
公共财政收入()
{
BindingSource BindingSource=新的BindingSource();
DataTable dt=Program.GetDataTableFromCSV(“../../res/sampledata.csv”);
dgdMain.DataSource=dt;
初始化组件();
}
}
}
。。。下面是
GetDataTableFromCSV()

公共静态数据表GetDataTableFromCSV(字符串路径)
{
DataTable=新的DataTable();
字符串[]值;
值=File.ReadAllLines(路径);
字符串[]csvRows=System.IO.File.ReadAllLines(路径);
字符串[]头=csvRows[0]。拆分(',');
//添加列名称
foreach(标题中的变量项)
dataTable.Columns.Add(新数据列(项));
字符串[]字段=null;
foreach(csvRows中的字符串csvRow)
{
//Debug.Write(csvRow+“\r\n”);
fields=csvRow.Split(',');
DataRow行=dataTable.NewRow();
row.ItemArray=字段;
dataTable.Rows.Add(行);
}
返回数据表;
}

dgdMain为null,这就是它抛出
NullReferenceException
的原因

您必须在调用
InitializeComponent
后使用它

另外,看看这个链接。

初始化组件必须位于顶部。应该是这样的:

    public frmMain()
    {
        InitializeComponent();

        BindingSource bindingSource = new BindingSource();
        DataTable dt = Program.GetDataTableFromCSV("../../res/sampledata.csv");
        dgdMain.DataSource = dt;
    }

为什么要在构造函数中创建从不使用的BindingSource?为什么要在GetDataTable中执行两次
File.ReadAllLines(path)
,(
values
也从不使用)?首先调用InitializeComponent(),然后可以使用dgdMain。此外,CSV文件可能在实际值中包含逗号,因此在
上拆分,
不是最好的主意。请参阅@chancea,这是一个很好的说明。