2014-12-29 2 views
2

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

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

, например: -

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>

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

ответ

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; 
} 
+0

Спасибо за идею. Это соответствовало моему требованию. – codeboyz

0

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

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

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

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

0

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

Смежные вопросы