Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

alexds

 
Название:

Скрывающаяся панель

Дата: 17 October 2008
Описание: С помощью Microsoft Ajax сожно создать скрывающуюся панель (Collapsed panel). Но у этого решения есть серьезный недостаток - невозможно управлять состоянием компонента с серверного кода. Контрол, представленный здесь, очень простой, но лишён этого недостатка. Он использовался при создании портала http://DoWork.ru 
  Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения следующую строку: [CODEPOST ID=237]Скрывающаяся панель[/CODEPOST]
Оценка: Проголосовало 10 посетителей, средняя оценка 4.00
Оценить:
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Web;
  4 using System.Text;
  5 using System.Web.UI.WebControls;
  6 using System.ComponentModel;
  7 using System.Web.UI;
  8 
  9 
 10 
 11 namespace DoWork.Presenters.Controls
 12 {
 13     /// <summary>
 14     /// The control represents link on collapsed panel.
 15     /// </summary>
 16     /// <example>
 17     /// &lt;dw:CollapsedPanel id="filterLink" runat="server"
 18     ///     CollapsedText="Скрыть фильтр..."
 19     ///     ExpandedText="Настроить фильтр проектов..." CollapsedPanel="panelFilter" /&gt;
 20     ///     
 21     /// &lt;asp:Panel id="panelFilter" runat="server"  /&gt;
 22     /// </example>
 23     public class CollapsedPanel : HyperLink
 24     {
 25         #region Properties
 26 
 27         private string _CollapsedIconUrl = string.Empty;
 28 
 29         /// <summary>
 30         /// Gets or sets the collapsed icon URL.
 31         /// </summary>
 32         public string CollapsedIconUrl
 33         {
 34             get { return _CollapsedIconUrl; }
 35             set { _CollapsedIconUrl = value; }
 36         }
 37 
 38 
 39 
 40         private string _ExpandedIconUrl = string.Empty;
 41 
 42         /// <summary>
 43         /// Gets or sets the expanded icon URL.
 44         /// </summary>
 45         public string ExpandedIconUrl
 46         {
 47             get { return _ExpandedIconUrl; }
 48             set { _ExpandedIconUrl = value; }
 49         }
 50 
 51 
 52 
 53         private string _IconAndTextSeparator = "&nbsp;";
 54 
 55         /// <summary>
 56         /// Gets or sets the icon and text separator.
 57         /// </summary>
 58         [DefaultValue("&nbsp;")]
 59         public string IconAndTextSeparator
 60         {
 61             get { return _IconAndTextSeparator; }
 62             set { _IconAndTextSeparator = value; }
 63         }
 64 
 65 
 66 
 67         private string _CollapsedText = string.Empty;
 68 
 69         /// <summary>
 70         /// Gets or sets the collapsed text.
 71         /// </summary>
 72         public string CollapsedText
 73         {
 74             get { return _CollapsedText; }
 75             set { _CollapsedText = value; }
 76         }
 77 
 78 
 79 
 80         private string _ExpandedText = string.Empty;
 81 
 82         /// <summary>
 83         /// Gets or sets the expanded text.
 84         /// </summary>
 85         public string ExpandedText
 86         {
 87             get { return _ExpandedText; }
 88             set { _ExpandedText = value; }
 89         }
 90 
 91 
 92 
 93         private string _CollapsedPanelID;
 94 
 95         /// <summary>
 96         /// Gets or sets the collapsed panel control ID.
 97         /// </summary>
 98         public string CollapsedPanelID
 99         {
100             get { return _CollapsedPanelID; }
101             set { _CollapsedPanelID = value; }
102         }
103 
104 
105 
106         private bool _Collapsed = true;
107 
108         /// <summary>
109         /// Gets or sets a value indicating whether this <see cref="CollapsePanel"/> is collapsed.
110         /// </summary>
111         [DefaultValue(true)]
112         public bool Collapsed
113         {
114             get { return _Collapsed; }
115             set { _Collapsed = value; }
116         }
117 
118         #endregion
119 
120 
121 
122         /// <summary>
123         /// Renders the HTML opening tag of the control to the specified writer. This method is used primarily by control developers.
124         /// </summary>
125         public override void RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
126         {
127             if (!(this.Parent.FindControl(this.CollapsedPanelID) is WebControl))
128                 throw new Exception("Input correct CollapsedPanelID value");
129 
130             WebControl cntrl = (WebControl)this.Parent.FindControl(this.CollapsedPanelID);
131             cntrl.Attributes.CssStyle.Add(HtmlTextWriterStyle.Display, 
132                 this.Collapsed ? "none" : "");
133 
134             if (!string.IsNullOrEmpty(this.CollapsedIconUrl) &&
135                 !string.IsNullOrEmpty(this.ExpandedIconUrl))
136             {
137                 string img = "<img id=\"{0}\" src=\"{1}\" border=\"0\" alt=\"\" collapsedUrl=\"{2}\"  expandedUrl=\"{3}\" />";
138                 writer.Write(string.Format(img, this.ClientID + "_img",
139                     this.Collapsed ? ResolveUrl(this.ExpandedIconUrl) : ResolveUrl(this.CollapsedIconUrl),
140                 ResolveUrl(this.CollapsedIconUrl), 
141                 ResolveUrl(this.ExpandedIconUrl)));
142 
143                 writer.Write(this.IconAndTextSeparator);
144             }
145 
146             this.NavigateUrl = "javascript: dw_changePanelView('" + this.ClientID + "');";
147             this.Attributes.Add("panelid", cntrl.ClientID);
148             this.Attributes.Add("collapsedtext", this.CollapsedText);
149             this.Attributes.Add("expandedtext", this.ExpandedText);
150 
151             if (!this.Collapsed)
152                 this.Text = this.CollapsedText;
153             else
154                 this.Text = this.ExpandedText;
155 
156             base.RenderBeginTag(writer);
157         }
158 
159 
160 
161         /// <summary>
162         /// Raises the <see cref="E:System.Web.UI.Control.PreRender"/> event.
163         /// </summary>
164         protected override void OnPreRender(EventArgs e)
165         {
166             base.OnPreRender(e);
167 
168             string script = @"
169 function dw_changePanelView(linkID, show)
170 {
171 var pnlID = document.getElementById(linkID).getAttribute('panelid');
172 var o = document.getElementById(pnlID);
173 var imageID = linkID + '_img';
174 if (show == true || o.style.display == 'none')
175 {
176 o.style.display = '';
177 document.getElementById(linkID).innerHTML = document.getElementById(linkID).getAttribute('collapsedtext');
178 
179 if (dw_LinkHasImage(imageID))
180 {
181 document.getElementById(imageID).src = document.getElementById(imageID).getAttribute('collapsedUrl');
182 }
183 }
184 else
185 {
186 o.style.display = 'none';
187 document.getElementById(linkID).innerHTML = document.getElementById(linkID).getAttribute('expandedtext');
188 if (dw_LinkHasImage(imageID))
189 {
190 document.getElementById(imageID).src = document.getElementById(imageID).getAttribute('expandedUrl');
191 }
192 }
193 }
194 function dw_LinkHasImage(imageID)
195 {
196 var b =
197 document.getElementById(imageID) != null &&
198 document.getElementById(imageID).getAttribute('collapsedUrl') != '' &&
199 document.getElementById(imageID).getAttribute('expandedUrl') != '';
200 
201 return b;
202 }
203 ";
204 
205             Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CollapsePanel", script, true);
206         }
207 
208 
209     }
210 }
211 
Вернуться к списку исходников в категории Стандартные элементы управления
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта