Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование объекта asp:Panel 
:(
    Опции темы
ReFleX
Дата 18.8.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 26.9.2004
Где: Таллинн

Репутация: нет
Всего: 3



Всем привет!

Нужная помощь, необходимо скопировать и вставить на ту же страницу asp:Panel вместе с располагающимися в ней элементами. Расскажите кто имел опыт, как возможно это сделать наиболее правильно.

Суть в том что asp:Panel должная копироваться и добавляться на ту же страницу при каждом нажатии на эту кнопку.

Мне не важно будет ли asp:Panel или может asp:PlaceHolder, главное осуществить копирование некоторых элементов.
PM WWW   Вверх
Crypton
Дата 18.8.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 9.10.2006
Где: США, Санкт-Петерб ург

Репутация: 2
Всего: 2



Хм. Все, что приходит в голову, это Controls.Add.

К примеру myPlaceHolder.Controls.Add(pnlMyPanel); оставляя оригинальную панель на самой странице.
--------------------
«Все, что вы знаете — ложь» Теория мироздания 
PM MAIL WWW ICQ Skype   Вверх
ReFleX
Дата 18.8.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 26.9.2004
Где: Таллинн

Репутация: нет
Всего: 3



Попробовал, ничего не произошло. Не хочет копировать.

Сделал простой пример:
Код

<asp:Panel ID="Panel1" runat="server">
<asp:Label ID="Label1" runat="server" />
</asp:Panel>
<asp:Panel ID="Panel2" runat="server"></asp:Panel>

<asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" />

Код

    protected void Page_Load(object sender, EventArgs e)
    {
      Label1.Text = "asd";
    }
    protected void Button1_OnClick(object sender, EventArgs e)
    {
      Panel2.Controls.Add(Panel1);
    }

PM WWW   Вверх
1stain
Дата 19.8.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 11
Всего: 40



Код

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<%@ Import Namespace="System.Collections.Generic"%>
<%@ Import Namespace="System.Reflection"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script runat="server">
        private int currentCopySuffix = 0;
        private int DynamicControlsCount
        {
            get
            {
                return ViewState["DynamicControls"] == null ? 0 : (int)ViewState["DynamicControls"];
            }
            set
            {
                ViewState["DynamicControls"] = value;
            }
        }

        /// <summary>
        /// Если не переопределить этот метод, динамически созданные контролы
        /// "потеряются" после постбэка
        /// </summary>
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            for (int i = 0; i < DynamicControlsCount; i++)
            {
                CopyWebControlToDestination(SourcePanel, DestinationPanel);
            }
        }
        
        protected void CopyButton_OnClick(object sender, EventArgs e)
        {
            currentCopySuffix = DynamicControlsCount;
            CopyWebControlToDestination(SourcePanel, DestinationPanel);
            DynamicControlsCount++;
        }

        private void CopyWebControlToDestination(Control source, Control destination)
        {
            RecursiveCopy(source, destination);
            currentCopySuffix++;
        }

        private void RecursiveCopy(Control source, Control destination)
        {
            Control copy = Copy(source);
            foreach (Control child in source.Controls)
            {
                RecursiveCopy(child, copy);
            }
            destination.Controls.Add(copy);
        }

        /// <summary>
        /// Так как класс Control не реализует ICloneable, то будем копировать через рефлексию
        /// </summary>
        private Control Copy(Control c)
        {
            Type controlType = c.GetType();
            Control copy = Activator.CreateInstance(controlType) as Control;
            var properties = controlType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo property in properties )
            {
                if (property.CanWrite)
                {
                    property.SetValue(copy, property.GetValue(c,null), null);
                }
            }
            copy.ID = string.IsNullOrEmpty(c.ID)? "": string.Format("{0}_copy_{1}", c.ID, currentCopySuffix);
            return copy;
        }
    </script>
</head>
<body>
    <form id="aspnetForm" runat="server">
    <div>
        <asp:Panel runat="server" ID="SourcePanel" >
            <asp:Label runat="server" ID="Label1" >Hello, World!</asp:Label>
            <br />
            <span >Hello once again!</span>
        </asp:Panel>
        <hr />
        <asp:Panel runat="server" ID="DestinationPanel" >
        </asp:Panel>
        <br />
        <asp:Button runat="server" ID="CopyButton" Text="Copy" OnClick="CopyButton_OnClick" />
    </div>
    </form>
</body>
</html>



--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.