Можно ли скопировать содержимое панели на другую панель

У меня есть веб-форма C# ASP .net с одной панелью, имеющей множество элементов управления, таких как текстовые поля и раскрывающиеся списки в табличном столбце. Пользователю разрешено вводить данные в эти элементы управления, и при нажатии кнопки «Копировать» все содержимое этой панели должно быть скопировано на другую панель на той же странице, имеющую точно такие же элементы управления и столбцы, для свойства enable которых установлено значение false.

Я получаю только возможность сделать это, как показано ниже

eg:-

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>

Заранее спасибо..


person codeboyz    schedule 29.12.2014    source источник


Ответы (3)


вы можете рассматривать это как подсказку, но имя элементов управления должно быть одинаковым на обеих панелях, чтобы идентифицировать его. См. приведенный ниже псевдокод, который может вам помочь.

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;
}
person Bhuvan Ram    schedule 29.12.2014
comment
Спасибо за идею. Это соответствовало моему требованию. - person codeboyz; 02.01.2015

вы должны создавать все элементы управления panel2 динамически. Нравится

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

Это тоже не очень хороший подход. Таким образом, вы должны создать цикл и создать все элементы управления в цикле.

В качестве альтернативы вы можете подумать об использовании UserControl..

person Mehmet    schedule 29.12.2014

В этом случае я бы использовал некоторую форму шаблонного управления, такого как повторитель, затем, когда нажата кнопка копирования, я копирую данные как новую строку в источнике данных, а затем повторно привязываю повторитель к новым данным - вы будете затем иметь копию как данных, так и управления в двух строках в повторителе.

person Symeon Breen    schedule 29.12.2014