尝试将行添加到现有数据表和网格视图时出错

时间:2017-11-06 18:19:53

标签: vb.net datagridview visual-studio-2017

我目前有一个gridview,我可以用查询填充。在按钮上单击我想再次使用新值运行查询,并将新信息添加到gridview中已显示的内容。我试图通过将当前在gridview中的信息复制到数据表中然后向表中添加行然后重置gridview上的绑定并刷新gridview来尝试这样做。问题是我在尝试添加新行时遇到错误(System.Data.NoNullAllowedException:'ColumnName'不允许空值。

以下是我尝试用于此过程的代码。任何帮助将不胜感激。

Dim EpicorCM As New SqlCommand(JobSelect, EpicorCon)
            EpicorCon.Open()
            Dim EpicorReader As SqlDataReader = EpicorCM.ExecuteReader
            Dim JobInfoTable As New DataTable
            JobInfoTable = CType(dgvJobInfo.DataSource, DataTable).Copy
            JobInfoTable.Rows.Add(EpicorReader)
            dgvJobInfo.AutoGenerateColumns = True
            dgvJobInfo.DataSource = JobInfoTable
            dgvJobInfo.Refresh()
            EpicorCon.Close()

1 个答案:

答案 0 :(得分:1)

您正尝试将SqlDataReader添加到Rows集合中,但这不起作用。它只会编译,因为Add()方法的重载为params的{​​{1}}。

幸运的是Object有一种加载阅读器的方法。而不是:DataTable,请执行以下操作:

JobInfoTable.Rows.Add(EpicorReader)

顺便说一句,命令和读者是Disposable资源,因此您可以通过不在JobInfoTable.Load(EpicorReader) 块或Using块中处置它们来泄漏内存。