DataTable.NewRow()用来创建一个新的Row,为什么还要加回自己dt.Rows.Add()?

oiuaeor 2014-08-27 01:42:42
既然DataRow类型本身的构造函数是不可public访问的,因此必须得像下面这样来创建一个DataRow:

DataTable dt = new DataTable("t1");
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);

我就奇怪了,既然dt.NewRow()已经在Table里面创建了一个新的DataRow对象,为什么还要dt.Rows.Add()再把它加进来才能生效? NewRow()并不是DataTable的静态方法啊,它是和DataTable的实例绑定的。

希望我提的问题表述很清楚了。
...全文
2794 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2014-08-27
  • 打赏
  • 举报
回复
引用 6 楼 Z65443344 的回复:
NewRow()不仅仅是指定结构,而是生成了一个"虚列" 因为DataRow是引用类型,如果指定了dr=dt1.NewRow(),然后执行dt2.Rows.Add(dr),是不行的,即使dt1和dt2结构完全一致 所以仅仅给dr指定结构,是无法添加到dt里的 dr必须先指向dt的某一列,才能添加进去
第一,“创建与DataTable具有相同架构的新DataRow对象”是微软msdn的原话,所以你说的“虚行”只是个人对这段文字的理解不同。事实是NewRow产生了一个实实在在的DataRow对象,只不过不在DataTable的DataRowCollection里,是否添加进去取决于是否调用Add 第二,我并没有说dt1.NewRow能被dt2的rows添加,不过既然你提到了,其实还是可以通过Rows.Add(dr.ItemArray)的方式,复制一份数据到同其他的DataTable中
白衣如花 2014-08-27
  • 打赏
  • 举报
回复
确实有点费解呢
於黾 2014-08-27
  • 打赏
  • 举报
回复
打错字,列->行
於黾 2014-08-27
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
NewRow()是用来创建与DataTable具有相同架构的新DataRow对象,dt只是用来参照生成同样的架构,并没有说在dt后添加一行空行,是否要添加是由Add决定而不是NewRow。
NewRow()不仅仅是指定结构,而是生成了一个"虚列" 因为DataRow是引用类型,如果指定了dr=dt1.NewRow(),然后执行dt2.Rows.Add(dr),是不行的,即使dt1和dt2结构完全一致 所以仅仅给dr指定结构,是无法添加到dt里的 dr必须先指向dt的某一列,才能添加进去
bwangel 2014-08-27
  • 打赏
  • 举报
回复
你可以添加一个DataTable的扩展方法: public static void AddNewRow(this DataTable dt){ var row = dt.NewRow(); dt.Add(row); } 这样就可以如你所愿: dt.AddNewRow()来直接添加新行了。
漫天雪飞 2014-08-27
  • 打赏
  • 举报
回复
组合关系 DataTable 和DataRow 是两个对象 newRow是创建一个DataRow对象, add是设置他们之间的关系
於黾 2014-08-27
  • 打赏
  • 举报
回复
为什么要这样呢? 因为除了add方法,还有insert方法,可以将新行插入到中间去 所以newrow只是生成一个虚的行,并不是真正生成了一行,还要看你到底把它放哪
xdashewan 2014-08-27
  • 打赏
  • 举报
回复
NewRow()是用来创建与DataTable具有相同架构的新DataRow对象,dt只是用来参照生成同样的架构,并没有说在dt后添加一行空行,是否要添加是由Add决定而不是NewRow。
於黾 2014-08-27
  • 打赏
  • 举报
回复
DataRow dr = dt.NewRow(); 意思是定义一个dr,它是dt里的一个新行(空行,无数据,列结构与dt相同). 这里只从dt获取,没有给dt赋值,所以dt的行数是没有变化的. 当然你也可以这样写 DataRow dr = dt.Rows[0];则dr指向dt的第一行(DataRow是引用类型)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧