powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Класс Wizard в VS2005
20 сообщений из 20, страница 1 из 1
Класс Wizard в VS2005
    #33858796
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с такой проблемой, что из файла с кодом *.ascx.cs не видно контролы в разделе HeaderTemplate объекта Wizard.
К примеру:
<asp:Wizard runat="server" ID="wzrdTest">
<HeaderTemplate>
<asp:Label ID="lblHeader" runat="server" />
</HeaderTemplate>
<WizardSteps>
<asp:WizardStep runat="server" Title="first">
...
</asp:WizardStep>
</WizardSteps>
<asp:/Wizard>
Идея в том, чтобы в загаловке размещать некий контрол общий для всех шагов.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33858820
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У тебя же там текста нет, вот и не видно. Напиши
<asp:Label ID="lblHeader" runat="server" text="Обязательный
                    текст"/>
У меня все в порядке.<P>__________________________________</P>
<P>Я ни от кого, ни от чего не завишу.</P>
<P>Встань, делай как я, ни от кого не завись.</P>
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33858874
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело не в тексте. У меня там вообще не объект Label находиться, а другой ascx-контрол. Вот как раз дело в том как к нему обращаться.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33858954
gaidar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А через wzrdTest.Controls?--
Гайдар Магдануров
E-Mail | Блог | Сайт

Difficult I do now, impossible will take a while...
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33859037
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там многоступенчатая вложенность.
System.Web.UI.WebControls.Wizard+WizardChildTable
 System.Web.UI.WebControls.TableRow
  System.Web.UI.WebControls.TableCell
   System.Web.UI.WebControls.WizardDefaultInnerTable
    System.Web.UI.WebControls.TableRow
     System.Web.UI.WebControls.Wizard+InternalTableCell
      System.Web.UI.LiteralControl
      System.Web.UI.WebControls.Label__________________________________
Я ни от кого, ни от чего не завишу.
Встань, делай как я, ни от кого не завись.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33859080
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Голубчик был пойман по этому тернистому пути.
WzrdTest.Controls[0].Controls[0].Controls[1].Controls[0].Controls[0].Controls[0].Controls[1]__________________________________
Я ни от кого, ни от чего не завишу.
Встань, делай как я, ни от кого не завись.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33859360
gaidar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужас! Не так надо, а вот так:Control ctrl = WzrdTest.Controls.Find("имя контрола", true);
true говорит о том. что искать в дочерних. Так можно и от самой формы или страницы искать.--
Гайдар Магдануров
E-Mail | Блог | Сайт

Difficult I do now, impossible will take a while...
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33859371
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то нету такой функции.__________________________________
Я ни от кого, ни от чего не завишу.
Встань, делай как я, ни от кого не завись.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33859882
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2gaidar: Я тоже не нашёл в System.Web.UI.ControlCollection метода Find.
Вообще у класса Wizard'а, так как он унаследован от Control'а есть метод FindControl. Но этот метод не находит мой контрол. Вообще в MSDN описано два вида этого метода, можно так же помимо ID указывать ещё и уровень вложенности на котором искать, но данный вариант только в документации.
2Жасмин: Спасибо твой метод сработал. Но, конечно же, хотелось бы не настолько конкретный поиск, а более универсальный :)
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33859966
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
public Control FindAnyControl(WebControl control, string name)
{
foreach (Control c in control.Controls)
{
if (c.ID == name)
return c;

foreach (Control c1 in c.Controls)
{
if (c1.ID == name)
return c1;
foreach (Control c2 in c1.Controls)
{
if (c2.ID == name)
return c2;
foreach (Control c3 in c2.Controls)
{
if (c3.ID == name)
return c3;
foreach (Control c4 in c3.Controls)
{
if (c4.ID == name)
return c4;
foreach (Control c5 in c4.Controls)
{
if (c5.ID == name)
return c5;
foreach (Control c6 in c5.Controls)
{
if (c6.ID == name)
return c6;
}
}
}
}
}
}
}
return null;
}
public Control FindAnyControlRecursive(WebControl control, string name, int RecursionLevel)
{

foreach (Control c in control.Controls)
{
if (c.ID == name)
return c;
if (RecursionLevel > 0)
return FindAnyControlRecursive(c, name, RecursionLevel - 1);
else return null;
}
}

__________________________________
Я ни от кого, ни от чего не завишу.
Встань, делай как я, ни от кого не завись.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33859990
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
public Control FindAnyControl(WebControl control, string name)
{
foreach (Control c in control.Controls)
{
if (c.ID == name)
return c;

foreach (Control c1 in c.Controls)
{
if (c1.ID == name)
return c1;
foreach (Control c2 in c1.Controls)
{
if (c2.ID == name)
return c2;
foreach (Control c3 in c2.Controls)
{
if (c3.ID == name)
return c3;
foreach (Control c4 in c3.Controls)
{
if (c4.ID == name)
return c4;
foreach (Control c5 in c4.Controls)
{
if (c5.ID == name)
return c5;
foreach (Control c6 in c5.Controls)
{
if (c6.ID == name)
return c6;
}
}
}
}
}
}
}
return null;
}

Это раз. Ну понятно, будет критика, что все равно может не найти и притом слишком  много вложенных циклов.
Тады
__________________________________
Я ни от кого, ни от чего не завишу.
Встань, делай как я, ни от кого не завись.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33859997
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жасмин спасибо. Но мне кажется вот такой способ компактнее и универсальнее. :)
private Control FindCtrl (Control control, string id)
{
Control retControl = null;
foreach(Control ctrl in control.Controls)
{
if (ctrl.ID == id) return ctrl;
if (ctrl.HasControls())
{
retControl = FindCtrl(ctrl, id);
if (retControl != null && retControl.ID == id) return retControl;
}
}
return null;
}
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33860026
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините за offtop. 2Жасмин: Как ты в сообщение код вставляешь?
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33860049
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кнопочки с 0 и 1.__________________________________
Я ни от кого, ни от чего не завишу.
Встань, делай как я, ни от кого не завись.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33860170
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понял. А поподробнее можно?
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33863326
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник ещё один вопрос по Wizard'у и по шаблонам, на этот раз по SideBarTemplate.
Вообще мне интересно в какой момент происходит генерация элементов SideBar по шаблону?
А вопрос вообщем-то вот в чём. Есть шаблон:
<code>
<SideBarTemplate>
<div>
<table cellSpacing="0" cellPadding="2" border="0">
<tr>
<td>
<asp:DataList ID="SideBarList" runat="server" ItemStyle-CssClass="Normal">
<ItemTemplate>
<asp:LinkButton ID="SideBarButton" runat="server" Enabled="false" />
</ItemTemplate>
</asp:DataList>
</td>
</tr>
</table>
</div>
</SideBarTemplate>
</code>
В данном шаблоне используются LinkButton, представляющие собой ссылки на соответствующие шаги. Мне нужно программно сделать ссылкой только пройденые и текущий шаги, а остальные в виде постого текста. Вроде всё просто в Page_Load вставляешь код, который из истории пройдённых шагов (GetHistory()), берёт шаги и соответствующие им ссылки в SideBar'е делает Enabled=true. Но не работает. Если я в шаблоне для LinkButton указываю атрибут Enabled=false, то все ссылки становяться в режиме read only, если в true - соответственно в виде ссылок, если не указываю атрибут, так же как Enabled=true.
Задумался по поводу времени выполнения этого кода, пытался вставлять в разные места при разных значениях атрибута Enabled (в Page_Load, в событие PreRender, даже вставлял в событие смены шага). Никакого результата, программно показывает что сменил, а фактически нет.
Может кто может подсказать? Буду признателен.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33866649
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снимается. Если кому-то интересно реализовал следующим образом:
Файл *.ascx
<code>
<SideBarTemplate>
<div>
<table cellSpacing="0" cellPadding="2" border="0">
<tr>
<td>
<asp:DataList ID="SideBarList" runat="server" ItemStyle-CssClass="Normal">
<ItemTemplate>
<asp:LinkButton ID="SideBarButton" runat="server" Enabled="<%#IsStepLinkEnabled(Container.DataItem) %>" />
</ItemTemplate>
</asp:DataList>
</td>
</tr>
</table>
</div>
</SideBarTemplate>
</code>
Файл *.ascx.cs
<code>
private bool IsStepLinkEnabled(object dataItem)
{
WizardStep wizardStep = (WizardStep)dataItem;
bool enabled = false;
if (wzrdTest.ActiveStep.ID == wizardStep.ID)
enabled = false;
else
{
foreach (WizardStepBase step in wzrdTest.GetHistory())
{
if (step.ID == wizardStep.ID)
{
enabled = true;
break;
}
}
}
return enabled;
}
</code>
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33866721
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
private bool IsStepLinkEnabled(object dataItem){ WizardStep wizardStep = (WizardStep)dataItem; bool enabled = false; if (wzrdTest.ActiveStep.ID == wizardStep.ID) enabled = false; else { foreach (WizardStepBase step in wzrdTest.GetHistory()) { if (step.ID == wizardStep.ID) { enabled = true; break; } } } return enabled;}
А кнопочки тут, на форме, где пишешь, под смайликом.__________________________________
Я ни от кого, ни от чего не завишу.
Встань, делай как я, ни от кого не завись.
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33866773
Morooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Жасмин: У меня нет ни смайликов ни кнопочек. Ни под Firefox'ом, ни под IE. Но всё равно спасибо за ответ. :)
...
Рейтинг: 0 / 0
Класс Wizard в VS2005
    #33866858
Жасмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
 А откуда тогда смайлик появился в сообщении?
__________________________________
Я ни от кого, ни от чего не завишу.
Встань, делай как я, ни от кого не завись.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Класс Wizard в VS2005
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]