DataTable拒绝使用行填充

问题描述 投票:0回答:3

我似乎无法让我的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仍然为null,如下图所示:List remains null

我在.NET Framework 4.6中运行了这个代码,并且只是在4.7.1中尝试过,两个结果都是相同的。

c# .net datatable
3个回答
1
投票

你正在检查对象的错误部分。你应该检查的是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);
                }
            }
        }

1
投票

根据文档的DataRowCollection类的List属性不可供您使用。看到这个qazxsw poi

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

这就是为什么你得到错误而你不应该看List属性。那是错误的对象。


1
投票

手表documentation显示什么?

你试过dataTable.Rows[0]的例子吗?

MSDN's DataTable class

在您对空控制的评论之后再做一个快速评论。 private static void ShowTable(DataTable table) { foreach (DataColumn col in table.Columns) { Console.Write("{0,-14}", col.ColumnName); } Console.WriteLine(); foreach (DataRow row in table.Rows) { foreach (DataColumn col in table.Columns) { if (col.DataType.Equals(typeof(DateTime))) Console.Write("{0,-14:d}", row[col]); else if (col.DataType.Equals(typeof(Decimal))) Console.Write("{0,-14:C}", row[col]); else Console.Write("{0,-14}", row[col]); } Console.WriteLine(); } Console.WriteLine(); } 是一个局部变量。

© www.soinside.com 2019 - 2024. All rights reserved.