У меня возникла такая ситуация/вопрос. На странице есть репитер, в зависимости от условия авторизован пользователь на сайте или нет, хотелось бы в последнем столбце репитера либо ставить Label прочерк (нет прав ввода), либо, если пользователь уже авторизован, то показывать там поле ввода и кнопку, по клику которой я хотел бы ловить от него введённые значения.
Есть пути это реализовать ?
Re: Как изменить контролы в репитере от условий
От:
Аноним
Дата:
25.11.05 12:58
Оценка:
Здравствуйте, Saper, Вы писали:
S>Привет всем.
S>У меня возникла такая ситуация/вопрос. На странице есть репитер, в зависимости от условия авторизован пользователь на сайте или нет, хотелось бы в последнем столбце репитера либо ставить Label прочерк (нет прав ввода), либо, если пользователь уже авторизован, то показывать там поле ввода и кнопку, по клику которой я хотел бы ловить от него введённые значения.
S>Есть пути это реализовать ?
Есть событие ItemDataBound. Можно при биндинге сделать с элементом все,что угодно.
Здравствуйте, Saper, Вы писали:
S>Привет всем.
S>У меня возникла такая ситуация/вопрос. На странице есть репитер, в зависимости от условия авторизован пользователь на сайте или нет, хотелось бы в последнем столбце репитера либо ставить Label прочерк (нет прав ввода), либо, если пользователь уже авторизован, то показывать там поле ввода и кнопку, по клику которой я хотел бы ловить от него введённые значения.
S>Есть пути это реализовать ?
namespace metacomm.webcontrols
{
using System;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
[PersistChildren(true), ParseChildren(false)]
public class switch_panel : PlaceHolder
{
public int shown_control_index
{
get {
Control[] cls = get_non_literal_controls( this.Controls );
for ( int i = 0; i < cls.Length; ++i )
if ( cls[i] == shown_control_ )
return i;
return -1;
}
set {
show_control( value == -1
? null
: get_non_literal_controls( this.Controls )[ value ] );
}
}
private void show_control( Control control )
{
Control[] non_literal_controls = get_non_literal_controls( this.Controls );
foreach ( Control c in non_literal_controls )
{
if ( c == control ) shown_control_ = c;
c.Visible = c == control;
}
}
private static Control[] get_non_literal_controls( ControlCollection controls )
{
ArrayList r = new ArrayList();
foreach( Control c in controls )
// They are usually just a whitespaceif ( c as LiteralControl == null )
r.Add( c );
return (Control[])r.ToArray( typeof( Control ) );
}
private Control shown_control_;
}
}
Здравствуйте, excorp, Вы писали:
E>честно говоря не согласен. E>ради такого писать отдельный контрол ненужно. E>я бы сделал так:
E>
skip
E>
E>
skip
E>
бееее....
ужасно... везде где понадобиться такая функциональность писать так? фу....
более того такой контрол применим не толко здесь... он писался не ДЛЯ ЭТОГО.
например поисковая страница, когда найдено чтото показываем грид, не найдено div с текстом "Нифига не нашли".
<my:switch_panel runat=server id = switch_>
<asp:dataGrid ...../>
<asp:Panel>"Нифига не нашли"</asp:Panel>
</my:switch_panel>
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, excorp, Вы писали:
E>>честно говоря не согласен. E>>ради такого писать отдельный контрол ненужно. E>>я бы сделал так:
E>>
M>skip
E>>
E>>
M>skip
E>>
M>бееее....
M>ужасно... везде где понадобиться такая функциональность писать так? фу....
M>более того такой контрол применим не толко здесь... он писался не ДЛЯ ЭТОГО. M>например поисковая страница, когда найдено чтото показываем грид, не найдено div с текстом "Нифига не нашли".
M>
M> <my:switch_panel runat=server id = switch_>
M> <asp:dataGrid ...../>
M> <asp:Panel>"Нифига не нашли"</asp:Panel>
M> </my:switch_panel>
M>
M>еще пример, есть DropDown с 5 пунктами .... надо в зависимости от выбранного показывать выбранную панель
M>P.S. Мелко мыслите.
хм...
Наверняка Вы правы, а я — нет.
Подумал тут, что было бы удобнее определять показываемый контрол не по индексу, а по идентификатору.
Вот что получилось (извиняюсь за извращение Вашего кода):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
namespace excorp.controls
{
[ToolboxData("<{0}:SwitchPanel runat=server></{0}:SwitchPanel>"), PersistChildren(true), ParseChildren(false)]
public class SwitchPanel : PlaceHolder
{
private Control shownControl;
public string ShowControlId
{
get
{
return ((shownControl != null) ? shownControl.ID : string.Empty);
}
set
{
ShowControl(this.FindControl(value));
}
}
private void ShowControl(Control control)
{
Control[] nonLiteralControls = GetNonLiteralControls(this.Controls);
foreach (Control c in nonLiteralControls)
{
if (c == control)
shownControl = c;
c.Visible = c == control;
}
}
private static Control[] GetNonLiteralControls(ControlCollection controls)
{
ArrayList r = new ArrayList();
foreach (Control c in controls)
//They are usually just a whitespaceif (c as LiteralControl == null)
r.Add(c);
return (Control[])r.ToArray(typeof(Control));
}
}
}
Каковы плохие стороны данного контрола?
Только опять сильно не пинайте!
P.S. Я не мелко мыслю, просто стараюсь не стрелять из пушки по воробьям... и иногда перегибаю палку
Re[6]: Как изменить контролы в репитере от условий
E>Каковы плохие стороны данного контрола?
E>Только опять сильно не пинайте!
да никаких, у каждого свои use cases. В нашем случае удобнее индекс( пример с дропдауном — индекс равен индексу в дропдауне ). Если вам больше подходят Id — бога ради
Re[7]: Как изменить контролы в репитере от условий
От:
Аноним
Дата:
26.11.05 09:39
Оценка:
Здравствуйте, mogadanez, Вы писали:
E>>Каковы плохие стороны данного контрола?
E>>Только опять сильно не пинайте!
M>да никаких, у каждого свои use cases. В нашем случае удобнее индекс( пример с дропдауном — индекс равен индексу в дропдауне ). Если вам больше подходят Id — бога ради