Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Само Обновляющаяся компонента


Автор: Edd 27.10.2008, 13:16
Нужно чтоб компонента самообновлялась, через определённое время.
На форме ScriptManager, UpdatePanel в котором компонента

Проблема с перересовкой компоненты, как её вызвать в TimerProc (Код таймера)

Другие идеи принемаются.
Код

.........
protected override void OnInit(EventArgs e)
        {                 
           .....
           try
            {
                //Add Label
                LabelWithTimer = new Label();
                LabelWithTimer.ID = "lblLabelWithTimer";
                LabelWithTimer.Text = "";
                this.Controls.Add(LabelWithTimer);

                 //Add timer
                System.Threading.Timer t = new System.Threading.Timer(new TimerCallback(TimerProc));
                t.Change(0, TimerTick);
            }
            catch { }
            base.OnInit(e);
        }

        protected override void Render(HtmlTextWriter output)
        {
            try
            {
                ..............

                LabelWithTimer.Text = DateTime.Now.ToString();
                string tmpOutStr = BasicMask;
                tmpOutStr = tmpOutStr.Replace("<?Label?>", RenderToString(LabelWithTimer));

                output.Write(tmpOutStr);
            }
            catch { }

        }

        private static string GetText()
        {
            ......... Получаю разные тексты
        }

        private static void TimerProc(object state)
        {
            try
            {
                LabelWithTimer.Text = DateTime.Now.ToString();//GetText();

               //теперь должен както это отобразить
            }
            catch { }
        }

         private static string RenderToString(Control c)//vozrasaet kontroll kak stroku
        {
            StringBuilder sb = new StringBuilder();
            System.IO.StringWriter sw = new System.IO.StringWriter(sb);
            HtmlTextWriter htw = new HtmlTextWriter(sw);
            c.RenderControl(htw);
            return sb.ToString();
        }


Render(HtmlTextWriter output) вызвать не получается, так как он не может быть static

Автор: Idsa 27.10.2008, 13:50
Ну уверен, что правильно понял вопрос... но если Вам нужно отобразить новые данные, то их нужно просто занести в контролы, которые находятся в UpdatePanel.

Автор: Edd 27.10.2008, 15:36
Цитата

если Вам нужно отобразить новые данные, то их нужно просто занести в контролы, которые находятся в UpdatePanel

Добавил Properties - TextToShow - где текст который отоброжается.
По буттону кликая и меная пропертиес, всё ОК. Но мне нужно чтоб контрол сам менял себе текст.

Следующим образом это не происходит.
Код

try
                {
                   lwLabelWithTimer contr = (lwLabelWithTimer)Page.FindControl(this.ID);
                    contr.TextToShow = DateTime.Now.ToString();
                }
                catch{}

Автор: Edd 27.10.2008, 16:28
Проблема решина, надобыло использовать другой таймер  smile 
        
Код

........
protected override void OnInit(EventArgs e)
        {
..........        
            try
            {
               //Add Label
                LabelWithTimer = new Label();
                LabelWithTimer.ID = "lblLabelWithTimer";
                LabelWithTimer.Text = "";
                this.Controls.Add(LabelWithTimer);

                //Add timer
                timer = new System.Web.UI.Timer();
                timer.ID = "idTimerShowText";
                timer.Tick += new EventHandler<EventArgs>(timer_Tick);
                timer.Interval = TimerTick;
                this.Controls.Add(timer);
            }
            catch { }

            base.OnInit(e);
        }
.............
protected void timer_Tick(object sender, EventArgs e)
        {
            LabelWithTimer.Text = GetText();
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)