首页 > 解决方案 > TypeError:在datagridview绑定数据源中向表添加行时表为空

问题描述

我有 DataGridView 是数据库中表的数据绑定源

当 DataGridView 为空时,我想以编程方式添加行

我正在使用此代码

        private void btn_add_Pax_Click(object sender, EventArgs e)
        {
            int number_of_pax = Convert.ToSByte(txt_Pax.Text);

            DataTable dt = dgvadministration.DataSource as DataTable;

            for (int i = 0; i <= number_of_pax; i++)
            {
                DataRow row = dt.NewRow();
                row[1] =Convert.ToString(i);
                dt.Rows.Add(row);
            }
        }

但得到这个错误

System.NullReferenceException:“对象引用未设置为对象的实例。” dt 为空。

错误显示在这里

数据行行 = dt.NewRow();

乳清这个 dt 总是为空

编辑 我想添加人数,当用户选择人数>>以编程方式添加行数=像照片一样的人数

注意datagridview 中的 session_Code 是 pax 照片的数量

这是我的类使用实体框架添加到 datagridview BindingSource

public partial class V_Session_Data
    {
        public int C_Order_Serial_Code { get; set; }
        public Nullable<int> Session_Code { get; set; }
        public Nullable<int> Masseurs_Code { get; set; }
        public string Masseurs_Name { get; set; }
        public Nullable<byte> Session_Type_Code { get; set; }
        public string Session__Type_Name { get; set; }
        public Nullable<int> C_Order_Masseurs { get; set; }
        public Nullable<short> Room_Number { get; set; }
        public Nullable<System.DateTime> Session_date { get; set; }
    }

标签: c#datagridview

解决方案


因为里面的对象dgvadministration.DataSource不是DataTable。

也许您将其设置为:

dgvadministration.DataSource = someDataTable.DefaultView;

在这种情况下,它是 a DataView,它不是数据表。

也许你从来没有设置它..


总而言之,我们无法告诉您它是什么,但调试器可以。当程序因异常停止时,关闭/最小化异常助手并指向,dgvadministration.DataSource工具提示将告诉您它是什么类型的对象:

在此处输入图像描述

在这里,我指向 DataSource,我可以看到它是一种{System.Data.DataView}类型。截图是 VB 只是因为那是我当时打开的,但 C# 是一样的。as如果您as将数据源作为对象的真正含义,或者它是从其派生的类型之一,您只会得到一个非空值


推荐阅读