C# DataTable拒绝用行填充

C# DataTable拒绝用行填充,c#,.net,datatable,C#,.net,Datatable,我似乎无法让System.Data.DataTable接受任何新行。 下面是正在使用的代码 using System.Data; using System.Windows.Forms; namespace DataTableToDGVTest { public partial class Form1 : Form { public Form1() { InitializeComponent();

我似乎无法让System.Data.DataTable接受任何新行。 下面是正在使用的代码

using System.Data;
using System.Windows.Forms;

namespace DataTableToDGVTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            DataTable dataTable = new DataTable();
            dataTable.Columns.Add("id", typeof(int));
            dataTable.Columns.Add("name", typeof(string));

            DataRow dataRow = dataTable.NewRow(); 
            dataRow["id"] = "1";
            dataRow["name"] = "Jesse";
            dataTable.Rows.Add(dataRow);

            //Tried this as well, still doesn't work
            //dataTable.Rows.Add(1, "Jesse");
        }
    }
}
调试时,我注意到DataTable.Rows.Count将从0增加到1,但是DataTable.Rows.List仍然为空,如下图所示


我在.NETFramework4.6中运行了这段代码,并在4.7.1中进行了尝试,结果完全相同

手表
dataTable.Rows[0]
显示什么

你试过我的例子吗


只是在您关于空控件的评论之后的另一个快速评论<代码>数据表是一个局部变量

手表
dataTable.Rows[0]
显示什么

你试过我的例子吗


只是在您关于空控件的评论之后的另一个快速评论<代码>数据表是一个局部变量

检查对象的错误部分。您应该检查的是
dataTable=>rows=>Results View=>[0]=>ItemArray
。请参阅下面的代码(更扩展的版本)以更好地演示

static void Main(string[] args)
        {
            var dataTable = new DataTable();
            dataTable.Columns.Add("id", typeof(int));
            dataTable.Columns.Add("name", typeof(string));

            var rowCount = dataTable.Rows.Count;
            Console.WriteLine(rowCount);

            var dataRow = dataTable.NewRow();
            dataRow["id"] = "1";
            dataRow["name"] = "Jesse";
            dataTable.Rows.Add(dataRow);

            var rowCountAfterAdding = dataTable.Rows.Count;
            Console.WriteLine(rowCountAfterAdding);
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var ia in row.ItemArray)
                {
                    Console.WriteLine(ia);
                }
            }
        }

你检查对象的错误部分。您应该检查的是
dataTable=>rows=>Results View=>[0]=>ItemArray
。请参阅下面的代码(更扩展的版本)以更好地演示

static void Main(string[] args)
        {
            var dataTable = new DataTable();
            dataTable.Columns.Add("id", typeof(int));
            dataTable.Columns.Add("name", typeof(string));

            var rowCount = dataTable.Rows.Count;
            Console.WriteLine(rowCount);

            var dataRow = dataTable.NewRow();
            dataRow["id"] = "1";
            dataRow["name"] = "Jesse";
            dataTable.Rows.Add(dataRow);

            var rowCountAfterAdding = dataTable.Rows.Count;
            Console.WriteLine(rowCountAfterAdding);
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var ia in row.ItemArray)
                {
                    Console.WriteLine(ia);
                }
            }
        }

根据文档,DataRowCollection类的List属性不可用。看到这个了吗

您可以在调试器中看到List属性,因为DataRowCollection是从InternalDataCollectionBase继承的,并且在该类中List属性受保护。看到这个了吗


这就是为什么会出现错误,并且不应该查看List属性。这是错误的对象。

根据文档,DataRowCollection类的List属性不可用。看到这个了吗

您可以在调试器中看到List属性,因为DataRowCollection是从InternalDataCollectionBase继承的,并且在该类中List属性受保护。看到这个了吗


这就是为什么会出现错误,并且不应该查看List属性。这是错误的对象。

Rows.Count为1。这意味着该行已成功添加到表中。为什么需要检查列表属性?您需要检查Rows.Count。该列表应显示DataRowCollection中有一行的信息为“{1,“Jesse”}”,这是我正在查看的列表属性。是的,Row.Count是1,但列表中确实有空项。列表为空可能是其他问题。。。但这并不意味着没有添加行。您可以阅读有关列表属性的信息,并了解访问该属性时应返回的内容。Rows.Count为1。这意味着该行已成功添加到表中。为什么需要检查列表属性?您需要检查Rows.Count。该列表应显示DataRowCollection中有一行的信息为“{1,“Jesse”}”,这是我正在查看的列表属性。是的,Row.Count是1,但列表中确实有空项。列表为空可能是其他问题。。。但这并不意味着没有添加行。您可以阅读有关List属性的内容,并了解访问该属性时应返回的内容。您知道,当我将其设置为“监视”时,对象实际上会显示在“监视”视图中。我很确定@gilliduck是对的,我检查了对象的错误部分。。。但是,当我
dataGridView1.DataSource=dataTable
时,我的dataGridView1创建了另一行,但是没有任何内容填充单元格。绑定可能有问题。例如,您的DataTable是一个局部变量。好的,我刚刚在
Form1
中全局声明了
DataTable
。仍然没有在
dataGridView1
中显示数据。它正在视图中创建一个新行,但新行中的单元格仍然为空。你知道吗,当我将其设置为“监视”时,对象实际上会显示在“监视”视图中。我很确定@gilliduck是对的,我检查了对象的错误部分。。。但是,当我
dataGridView1.DataSource=dataTable
时,我的dataGridView1创建了另一行,但是没有任何内容填充单元格。绑定可能有问题。例如,您的DataTable是一个局部变量。好的,我刚刚在
Form1
中全局声明了
DataTable
。仍然没有在
dataGridView1
中显示数据。它正在视图中创建新行,但新行中的单元格仍然为空。你说得对,现在我确实看到了信息。当我查看
dataTable.Rows[0]
时,我将其展开,并在
ItemArray
中查看信息。当我
dataGridView1.DataSource=dataTable
mydatagridview1创建另一行时,单元格中没有填充任何内容。这正是促使我搜索检查员找出错误的地方的原因,然后我在列表中看到null,并认为这就是问题所在。你是对的,现在我确实看到了信息。当我查看
dataTable.Rows[0]
时,我将其展开,并在
ItemArray
中查看信息。当我
dataGridView1.DataSource=dataTable
mydatagridview1创建另一行时,单元格中没有填充任何内容。这促使我仔细检查检查人员,找出错误,然后我在列表中看到null,并认为这就是问题所在。