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里面
最后一次设的值 

解决方案 »

  1.   

    在CloneRow中newR.Cells.Add((HtmlTableCell)Clone(c));
    ==>因为这里是clone的,所以可以改成这样。newR.Cells.Add(new HtmlTableCell());
      

  2.   

    墨白兄 不好意思 
    刚去受训了我不用clone是无法满足要求的!
    有改进方法吗?
      

  3.   

    我不用clone是无法满足要求的!
    ==>为什么?
      

  4.   

    比如模板行 第一列有一个HtmlSelect 第二列有个click事件然后我新建的行 都把这个东西复制过来 然后只修改 text
      

  5.   

    1。
    MemberwiseClone 是浅拷贝,如果你的 Cell 里面还有 Control 需要手动进行深拷贝2。
    将 oTr 添加到 Table.Rows 中了吗?
      

  6.   

    不明白为什么不能用Clone()..如果要进行深复制,要实现ICloneable接口,自己写Clone方法了
      

  7.   

    高歌
    那个clone是可以拷贝控件的
    问题是如题
    比如第一循环
    然后设列的值  比如第一列select选哪个 第二行 写什么text 都可以
    第二次循环 还是可以
    但是把第一次循环的那一行 也替换成了第二次的内容最后结果是 一个for循环新建行
    的内容都是最后一次for的内容
      

  8.   

    比如第一循环
    然后设列的值 比如第一列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 接口的类执行对象的浅表或深层复制。 
      

  9.   

    1。
    这还不是浅拷贝嘛??????
    你 Clone 出来的Cell里面的控件指向的都是同一个实例
    ========
    不好意思 
    我的错!
    我没搞清楚概念!
    我看第一行可以 
    我就以为可以!
    得换法了
    谢谢 晓风残月
      

  10.   

    2。
    关于 MemberwiseClone 方法说明:
    MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。
    =========
    受教了