代码之家  ›  专栏  ›  技术社区  ›  IAbstract

如何才能不设置DataView对象引用?

  •  0
  • IAbstract  · 技术社区  · 15 年前

    我有以下样品 SourceData 类将表示由SQL查询产生的数据视图:

    class MainClass
    {
        private static SourceData Source;
        private static DataView View;
        private static DataView Destination;
    
        public static void Main (string[] args)
        {
            Source = new SourceData();
            View = new DataView(Source.Table);
            Destination = new DataView();
    
            Source.AddRowData("Table1", 100);
            Source.AddRowData("Table2", 1500);
            Source.AddRowData("Table3", 1300324);
            Source.AddRowData("Table4", 1122494);
            Source.AddRowData("Table5", 132545);
    
            Console.WriteLine(String.Format("Data View Records: {0}", View.Count));         
    
            foreach(DataRowView drvRow in View)
            {
                Console.WriteLine(String.Format("Source {0} has {1} records.", drvRow["table"], drvRow["records"]));
                DataRowView newRow = Destination.AddNew();
                newRow["table"] = drvRow["table"];
                newRow["records"] = drvRow["records"];
            }
    
            Console.WriteLine();
            Console.WriteLine(String.Format("Destination View Records: {0}", Destination.Count));
    
            foreach(DataRowView drvRow in Destination)
            {
                Console.WriteLine(String.Format("Destination {0} has {1} records.", drvRow["table"], drvRow["records"]));
            }
    
        }
    }
    
    class SourceData
    {
        public DataTable Table
        {
            get{return dataTable;}
        }
    
        private DataTable dataTable;
    
        public SourceData()
        {
            dataTable = new DataTable("TestTable");
            dataTable.Columns.Add("table", typeof(string));
            dataTable.Columns.Add("records", typeof(int));
        }
    
        public void AddRowData(string tableName, int tableRows)
        {
            dataTable.Rows.Add(tableName, tableRows);
        }
    }
    

    我的输出是:

    数据视图记录:5
    源表1有100条记录。

    未处理的异常:System.NullReferenceException:在/usr/src/packages/build/mono-2.4.2.3中,未将对象引用设置为System.Data.DataView.AddNew()[0x0003e]处的对象实例 /mcs/class/system.data/system.data/dataview.cs:344,位于dataviewtest.main class.main(system.string[]args)[0x000e8]in/home/david/projects/dataviewtest/sourcedata.cs:29

    我在这里读过: DataView:AddNew Method...
    …看来我这样做是正确的。为什么我得到的对象引用没有设置?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Dean Harding    15 年前

    这个 DataView 必须是一个视图 某物 . 按照您的理解,它不是任何视图(使用默认构造函数)-您至少需要设置 数据视图 对某事物的属性。

    我想你真的想创造一个新的 DataTable 对于“目的地”,不是 数据视图 .

        2
  •  -1
  •   IAbstract    15 年前

    问题在于 Destination DATAVIEW。为了 AddNew() 要运行,必须有一个对象(在本例中是一个数据表)用于引用和添加新记录。

    通过更正以下内容:

    Destination = new DataView(new SourceData().Table);
    

    …数据视图将满足其要求。一开始这可能不合理,但要意识到 DataView 类直到有一个要在其上生成的数据表(或其他形式的记录集)才真正完成。

    现在输出为:

    数据视图记录:5
    源表1有100条记录。
    源表2有1500条记录。
    源表3有1300324条记录。
    源表4有1122494条记录。
    源表5有132545条记录。

    目的地视图记录:5
    目标表1有100条记录。
    目标表2有1500条记录。
    目的地表3有1300324条记录。
    目的地表4有1122494条记录。
    目的地表5有132545条记录。