|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
Скрывающаяся панель |
|
Дата:
|
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 /// <dw:CollapsedPanel id="filterLink" runat="server"
18 /// CollapsedText="Скрыть фильтр..."
19 /// ExpandedText="Настроить фильтр проектов..." CollapsedPanel="panelFilter" />
20 ///
21 /// <asp:Panel id="panelFilter" runat="server" />
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 = " ";
54
55 /// <summary>
56 /// Gets or sets the icon and text separator.
57 /// </summary>
58 [DefaultValue(" ")]
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 |
| Вернуться к списку исходников в категории Стандартные элементы управления |
|
|
 |
 |
 |
 |
|
|