关于自定义DataTable添加新列的问题(C#) c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般来说要先判断if(tempTradesTable.Columns["specialColumn"]==null){DataColumn newCol = new DataColumn();newCol.DataType = typeof(int); newCol.ColumnName = "specialColumn";tempTradesTable.Columns.Add(newCol);} 先判断tempTradesTable.Columns.Contans("specialColumn"),再addtradeTable.Clone();方法你是否重写过?如果调用的父类的方法,它输出的是DataTable类型 嗯,谢谢啊,这个办法很好,刚刚发现第二个问题是我不小心写错了,应该是IgnoreTradesTable.Columns.Add(newCol);。对于第一个问题,关于添加列之后,类型没变,但是TradeDataTable newTable=tradeTable.Clone();报错是为什么呢 按下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; } [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(); 会报错对于初学者又没有什么建议啊 public override global::System.Data.DataTable Clone() 这里写错了啊既然已经重写了,当然要返回你自定义类型了,怎么还返回DataTable 你的TradeDataTable继承自DataTable所以即使你返回的变量本身是return的TradeDataTable类型但是函数返回值是DataTable,依然可以赋值就是子类可以赋值给父类类型这样你可以先不改定义,试试这样:TradeDataTable newTable=(TradeDataTable)tradeTable.Clone(); 谢谢啊,这个问题终于搞定了,实现了我想要的功能了。但依然遗留一点儿小问题Debug.WriteLine(orsTradesTable.Clone().GetType() + "********************" + orsTradesTable.Clone().Columns.Count);输出依然是:TradeDataTable*************10 (注:我的TradeDataTable原来只有9列,有一列是我自己用代码对对象进行添加的) 这个的解释是不是:orsTradesTable.Clone().GetType() 调用了子类的toString()方法,而非调用了父类DataTable的toString()方法,即多态的表现形式? 我暂时没有找到子类TradeDataTable的toString()方法,子类的toString()方法也是子类默认的,这样解释对吧? ToString()是个静态方法,这不过是int转string的一个公有方法,跟你的什么子类父类什么的无关所以你orsTradesTable.Clone().Columns.Count是10,tostring之后它当然是"10",而不是"9" 听说过"扩展方法"吗这个静态方法是Int32类里的静态方法专门用于int转string的 C# 如何调整 DevExpress 控件工具栏图标的大小 Winform控件显示问题 新手我遇到的问题 求助Exchange EWS 问题 超级简单的问题 再问一个多线程的问题-100分 水晶报表里边的pull和push是什么意思?他们是做什么的?有什么作用? winform自定义控件 经常丢失列 DLL 地狱 考MCSD难么?有用么?你考了没有? 带墙壁的迷宫如何走? 请教一个莫名其妙的问题
DataColumn newCol = new DataColumn();
newCol.DataType = typeof(int);
newCol.ColumnName = "specialColumn";
tempTradesTable.Columns.Add(newCol);
}
如果调用的父类的方法,它输出的是DataTable类型
[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;
}
[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(); 会报错对于初学者又没有什么建议啊
这里写错了啊
既然已经重写了,当然要返回你自定义类型了,怎么还返回DataTable
所以即使你返回的变量本身是return的TradeDataTable类型
但是函数返回值是DataTable,依然可以赋值
就是子类可以赋值给父类类型这样你可以先不改定义,试试这样:
TradeDataTable newTable=(TradeDataTable)tradeTable.Clone();
Debug.WriteLine(orsTradesTable.Clone().GetType() + "********************" + orsTradesTable.Clone().Columns.Count);
输出依然是:TradeDataTable*************10 (注:我的TradeDataTable原来只有9列,有一列是我自己用代码对对象进行添加的) 这个的解释是不是:orsTradesTable.Clone().GetType() 调用了子类的toString()方法,而非调用了父类DataTable的toString()方法,即多态的表现形式? 我暂时没有找到子类TradeDataTable的toString()方法,子类的toString()方法也是子类默认的,这样解释对吧?
所以你orsTradesTable.Clone().Columns.Count是10,tostring之后它当然是"10",而不是"9"
这个静态方法是Int32类里的静态方法
专门用于int转string的