如何在C#后面的代码中复制一个控件

时间:2014-04-25 13:37:00

标签: c# asp.net

我想在asp.net代码隐藏中复制一个控件。

在我的代码中:

HtmlGenericControl divRowHeader = new HtmlGenericControl("div");
divRowHeader.Style.Add(HtmlTextWriterStyle.Width, "323px");
divRowHeader.Style.Add(HtmlTextWriterStyle.MarginTop, "2px");
divRowHeader.Style.Add(HtmlTextWriterStyle.MarginLeft, "45px");
divRowHeader.Style.Add(HtmlTextWriterStyle.Height, "30px");
divRowHeader.Style.Add("border-top", "solid 3px lightgray");
divRowHeader.Style.Add("border-bottom", "solid 3px lightgray");
divRowHeader.Style.Add("border-right", "solid 3px lightgray");
divRowHeader.Style.Add("border-left", "solid 3px lightgray");

divTabRessources.Controls.Add(divRowHeader);
divTabInterim.Controls.Add(divRowHeader);

我想将相同的控件添加到2个不同的div,但是现在它只是移动控件。是否有一个复制控件并为其提供另一个唯一ID的函数,因此没有冲突?

2 个答案:

答案 0 :(得分:3)

如果您正在寻找C#方法来执行此操作,请查看WebControl.MemberwiseClone()方法。以下是此方法的docs

但我的建议是尝试使用Repeater控件。以下是此控件的docs

答案 1 :(得分:1)

回答您关于如何"分解"的问题。您只需从尝试重用的代码中创建一个方法。 Visual Studio可以很好地简化它。它基本上可以为您完成大部分工作。突出显示要移动到方法中的代码,右键单击它,然后转到Refactor,然后转到Extract Method。给它一个名字,它会为你创建一个功能。做出调整,你就会好起来。这是完成版本的样子:

protected HtmlGenericControl CreateDivRowHeader(string id)
{
    HtmlGenericControl divRowHeader = new HtmlGenericControl("div");
    divRowHeader.Style.Add(HtmlTextWriterStyle.Width, "323px");
    divRowHeader.Style.Add(HtmlTextWriterStyle.MarginTop, "2px");
    divRowHeader.Style.Add(HtmlTextWriterStyle.MarginLeft, "45px");
    divRowHeader.Style.Add(HtmlTextWriterStyle.Height, "30px");
    divRowHeader.Style.Add("border-top", "solid 3px lightgray");
    divRowHeader.Style.Add("border-bottom", "solid 3px lightgray");
    divRowHeader.Style.Add("border-right", "solid 3px lightgray");
    divRowHeader.Style.Add("border-left", "solid 3px lightgray");
    divRowHeader.ID=id;
    return divRowHeader;
}

//now you can reuse the code
divTabRessources.Controls.Add(CreateDivRowHeader("control1"));
divTabInterim.Controls.Add(CreateDivRowHeader("control2"));