private HtmlTableRow CloneRow(HtmlTableRow sourceRow )
{
HtmlTableRow newR = new HtmlTableRow();
newR.ID = newR.UniqueID;
foreach (HtmlTableCell c in sourceRow.Cells)
{ newR.Cells.Add((HtmlTableCell)Clone(c));
} return newR;
} private object Clone(object source)
{
MethodInfo mi = typeof(object).GetMethod("MemberwiseClone", BindingFlags.NonPublic | BindingFlags.Instance);
return mi.Invoke(source, null);
}
这个是拷贝!下面是代码
模板列 HtmlTableRow oTr_ReadOnly= new HtmlTableRow();
for(...)//设置属行现在是在Table中添加行
for(int i = 0 ; i < 10 ; i ++)
{
HtmlTable oTr = new HtmlTableRow();
oTr = CloneRow(oTr_ReadOnly);//就是拷贝模板列
for()//设置各列的值
}
}//问题是:复制是可以
每次也增加了新行
不过每次增加的行的内容是在后一个for里面
最后一次设的值
{
HtmlTableRow newR = new HtmlTableRow();
newR.ID = newR.UniqueID;
foreach (HtmlTableCell c in sourceRow.Cells)
{ newR.Cells.Add((HtmlTableCell)Clone(c));
} return newR;
} private object Clone(object source)
{
MethodInfo mi = typeof(object).GetMethod("MemberwiseClone", BindingFlags.NonPublic | BindingFlags.Instance);
return mi.Invoke(source, null);
}
这个是拷贝!下面是代码
模板列 HtmlTableRow oTr_ReadOnly= new HtmlTableRow();
for(...)//设置属行现在是在Table中添加行
for(int i = 0 ; i < 10 ; i ++)
{
HtmlTable oTr = new HtmlTableRow();
oTr = CloneRow(oTr_ReadOnly);//就是拷贝模板列
for()//设置各列的值
}
}//问题是:复制是可以
每次也增加了新行
不过每次增加的行的内容是在后一个for里面
最后一次设的值
==>因为这里是clone的,所以可以改成这样。newR.Cells.Add(new HtmlTableCell());
刚去受训了我不用clone是无法满足要求的!
有改进方法吗?
==>为什么?
MemberwiseClone 是浅拷贝,如果你的 Cell 里面还有 Control 需要手动进行深拷贝2。
将 oTr 添加到 Table.Rows 中了吗?
那个clone是可以拷贝控件的
问题是如题
比如第一循环
然后设列的值 比如第一列select选哪个 第二行 写什么text 都可以
第二次循环 还是可以
但是把第一次循环的那一行 也替换成了第二次的内容最后结果是 一个for循环新建行
的内容都是最后一次for的内容
然后设列的值 比如第一列select选哪个 第二行 写什么text 都可以
第二次循环 还是可以
但是把第一次循环的那一行 也替换成了第二次的内容最后结果是 一个for循环新建行
的内容都是最后一次for的内容=========
1。
这还不是浅拷贝嘛??????
你 Clone 出来的Cell里面的控件指向的都是同一个实例2。
关于 MemberwiseClone 方法说明:
MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。例如,考虑一个名为 X 的对象,该对象引用对象 A 和 B。对象 B 又引用对象 C。X 的浅表副本创建一个新对象 X2,该对象也引用对象 A 和 B。与此相对照,X 的深层副本创建一个新对象 X2,该对象引用新对象 A2 和 B2,它们分别是 A 和 B 的副本。B2 又引用新对象 C2,C2 是 C 的副本。使用实现 ICloneable 接口的类执行对象的浅表或深层复制。
这还不是浅拷贝嘛??????
你 Clone 出来的Cell里面的控件指向的都是同一个实例
========
不好意思
我的错!
我没搞清楚概念!
我看第一行可以
我就以为可以!
得换法了
谢谢 晓风残月
关于 MemberwiseClone 方法说明:
MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。
=========
受教了