如何使用计算列加载DataTable?

时间:2017-07-01 10:12:38

标签: c# .net ado.net datareader

我有两个具有相同表格的DataSet。

数据集1

enter image description here

DataSet2

enter image description here

两个表的“FullName”列都将表达式属性设置为

[Grade]+'-'+[Class]

对于DataSet2,我定义了一个方法 - “导入”。

// DataSet2.cs file

namespace ConsoleApplication1
{
    public partial class DataSet2
    {
        public void Import(DataSet1 dataSet1)
        {
            this.Group.Load(dataSet1.Group.CreateDataReader());
        }
    }
}

下面的最后一行代码(dataSet2.Import(dataSet1);)抛出了InvalidOperationException。

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataSet1 dataSet1 = new DataSet1();
            dataSet1.Group.AddGroupRow(1, "A");
            dataSet1.Group.AddGroupRow(1, "B");

            DataSet2 dataSet2 = new DataSet2();
            dataSet2.Import(dataSet1);
        }
    }
}

那是因为“FullName”列是计算列。我想知道如何在这种特殊情况下绕过此异常?是否可以在加载时使DataReader跳过计算列?或许还有其他一些“伎俩”?

这是我在DataSets项目中的一个问题的复制品,其中有几个表格。

1 个答案:

答案 0 :(得分:0)

您需要修改导入功能,如下所示

 public void Import(DataSet1 dataSet1)
        {
            //this.Group.Load(dataSet1.Group.CreateDataReader());
            foreach(var group in dataSet1.Group)
            {
                GroupRow g  =this.Group.NewGroupRow();
                g.Class = group.Class;
                g.Grade = group.Grade;
                this.Group.AddGroupRow(g);
            }
        } 

因为用于导入所有列的加载函数,如果您有计算列,则无法使用。