Re: Как изменить контролы в репитере от условий
От: mogadanez Чехия  
Дата: 25.11.05 13:12
Оценка: 11 (2)
Здравствуйте, 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 whitespace
                if ( c as LiteralControl == null )
                    r.Add( c );
                    
            return (Control[])r.ToArray( typeof( Control ) );
            }
            
        private Control     shown_control_;
        }
}




<ItemTemplate>
   <my:switch_panel  runat=server  shown_control_index="<%#Page.User.Identity.IsAuthenticated ? 0 : 1 %>" >
        <asp:Label  runat=server text="----"/>
        <asp:Placeholder runat=server><asp:TextBox runat=server/><asp:Button runat=server/></asp:Placeholder>
     </my:switch_panel>
</ItemTemplate>
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.