C# DataTable拒绝用行填充
我似乎无法让System.Data.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();
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,并认为这就是问题所在。