是否可以将面板的内容复制到另一个面板

时间:2014-12-29 12:29:57

标签: c# asp.net copy panels

我有一个C# ASP .net网页表单,其中一个面板包含许多控件,如文本框和表格列中的下拉列表。允许用户在这些控件中输入数据,当按下“复制”按钮时,应将此面板的所有内容复制到同一页面上具有完全相同控件的其他面板以及其enabled属性设置为false的列

我只能选择像下面这样做

例如: -

Protected void Button_click ()
{
    Panel2.textbox1.Text = Panel1.textbox1.Text;
    Panel2.textbox2.Text = Panel1.textbox2.Text;
                   ...
                   ...
                   ...
    Panel2.textbox30.Text = Panel1.textbox30.Text;

导致很多行代码,我觉得它不是好方法。你能建议其他任何替代方案,还是唯一的方法?

我的标记看起来像这样



<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="AjaxToolkitTrial.WebForm5" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .auto-style1 {
            width: 100%;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <table class="auto-style1">
            <tr>
                <td>
                    <asp:Panel ID="Panel1" runat="server">
                        <table class="auto-style1">
                            <tr>
                                <td>
                                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:DropDownList ID="DropDownList1" runat="server">
                                    </asp:DropDownList>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Copy" />
                                </td>
                            </tr>
                        </table>
                    </asp:Panel>
                </td>
                <td>
                    <asp:Panel ID="Panel2" runat="server">
                        <table class="auto-style1">
                            <tr>
                                <td>
                                    <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:DropDownList ID="DropDownList2" runat="server">
                                    </asp:DropDownList>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:TextBox ID="TextBox6" runat="server"></asp:TextBox>
                                </td>
                            </tr>
                            <tr>
                                <td>&nbsp;</td>
                            </tr>
                        </table>
                    </asp:Panel>
                </td>
            </tr>
        </table>
    
    </div>
    </form>
</body>
</html>
&#13;
&#13;
&#13;

提前致谢..

3 个答案:

答案 0 :(得分:0)

你应该动态创建所有的panel2控件。 喜欢

    TextBox txt1 = new TextBox()
    TextBox txt2 = new TextBox()
    Panel2.Controls.Add(txt1);
    Panel2.Controls.Add(txt2);
    ...
    ...

这也不是好方法。所以你应该创建一个循环并在循环中创建所有控件。

或者你可以考虑使用UserControl ..

答案 1 :(得分:0)

在这种情况下我会做的是使用某种形式的模板化控件,如转发器,然后当按下复制按钮时,我将数据复制为数据源中的新行,然后将转发器重新绑定到新数据 - 然后,您将在转发器的两行中获得数据和控件的副本。

答案 2 :(得分:0)

您可以将其视为提示,但两个面板中控件的名称应相同以识别它..请参阅下面的伪代码,它可能对您有所帮助

foreach(Control c in Panel1.Controls)
{
    var control = Panel2.Controls.AsEnumerable().Where(p => p.name = c.name).select();
    Textbox txt = control as TextBox;
    c.Text = txt.Text;
}