解决方案 »

  1.   

    一般来说要先判断if(tempTradesTable.Columns["specialColumn"]==null){
    DataColumn newCol = new DataColumn();
    newCol.DataType = typeof(int);
     newCol.ColumnName = "specialColumn";
    tempTradesTable.Columns.Add(newCol);
    }
      

  2.   

    先判断tempTradesTable.Columns.Contans("specialColumn"),再addtradeTable.Clone();方法你是否重写过?
    如果调用的父类的方法,它输出的是DataTable类型
      

  3.   

    嗯,谢谢啊,这个办法很好,刚刚发现第二个问题是我不小心写错了,应该是IgnoreTradesTable.Columns.Add(newCol);。对于第一个问题,关于添加列之后,类型没变,但是TradeDataTable  newTable=tradeTable.Clone();报错是为什么呢
      

  4.   

    按下F12之后,是这样的。这个代码是我在别人的基础上面修改的,我是初学者
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
                [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
                public override global::System.Data.DataTable Clone() {
                    TradeDataTable cln = ((TradeDataTable)(base.Clone()));
                    cln.InitVars();
                    return cln;
                }
      

  5.   


    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
                [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
                public override global::System.Data.DataTable Clone() {
                    TradeDataTable cln = ((TradeDataTable)(base.Clone()));
                    cln.InitVars();
                    return cln;
                }//自动生成的代码
    这个好像是重写了clone方法,这个文件是自动生成的,xsd与之关联感觉都还不会由于重写之后的返回类型变了,所以TradeDataTable  newTable=tradeTable.Clone(); 会报错对于初学者又没有什么建议啊
      

  6.   

    public override global::System.Data.DataTable Clone() 
    这里写错了啊
    既然已经重写了,当然要返回你自定义类型了,怎么还返回DataTable
      

  7.   

    你的TradeDataTable继承自DataTable
    所以即使你返回的变量本身是return的TradeDataTable类型
    但是函数返回值是DataTable,依然可以赋值
    就是子类可以赋值给父类类型这样你可以先不改定义,试试这样:
    TradeDataTable  newTable=(TradeDataTable)tradeTable.Clone();
      

  8.   

    谢谢啊,这个问题终于搞定了,实现了我想要的功能了。但依然遗留一点儿小问题
    Debug.WriteLine(orsTradesTable.Clone().GetType() + "********************" + orsTradesTable.Clone().Columns.Count);
    输出依然是:TradeDataTable*************10   (注:我的TradeDataTable原来只有9列,有一列是我自己用代码对对象进行添加的)    这个的解释是不是:orsTradesTable.Clone().GetType() 调用了子类的toString()方法,而非调用了父类DataTable的toString()方法,即多态的表现形式?    我暂时没有找到子类TradeDataTable的toString()方法,子类的toString()方法也是子类默认的,这样解释对吧?
      

  9.   

    ToString()是个静态方法,这不过是int转string的一个公有方法,跟你的什么子类父类什么的无关
    所以你orsTradesTable.Clone().Columns.Count是10,tostring之后它当然是"10",而不是"9"
      

  10.   

    听说过"扩展方法"吗
    这个静态方法是Int32类里的静态方法
    专门用于int转string的