Asp.net 2.0 自定义控件开发[浮动工具条控件](示例代码下载)

本文介绍了一款浮动工具条控件的开发细节,该控件适用于如GridView等列表控件,提供快捷操作功能。文章提供了控件的运行效果截图,并详细展示了主控件类PopupTraceMenu的代码实现。

.

.

(一). 概述

控件名称: 浮动工具条控件, 可用于GridView等列表控件的一些常用快捷操作, 涉及到公司代码版权, 目前版本不是最终版本, 且去除了一些代码, 后面可下载的仅为纯控件开发技术相关代码. 通过扩展可以任意定制需要的功能. 里面一些设计思想也具有参考价值.

Author:【夜战鹰】【ChengKing(ZhengJian)】

(二). 控件运行效果截图

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><img alt="" src="https://p-blog.youkuaiyun.com/images/p_blog_youkuaiyun.com/ChengKing/FloatMenuControl.JPG"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 128.25pt" type="#_x0000_t75"><imagedata src="file:///D:%5CDOCUME~1%5CZHENGJ~1%5CLOCALS~1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.png" o:title=""></imagedata></shape>

(三). 代码部分

1. 主控件类PopupTraceMenu代码

1///<summary>
2///Author:【金鹰】【专注于DotNet技术】【ChengKing(ZhengJian)】
3///Blog:Http://blog.youkuaiyun.com/ChengKing
4///</summary>
5
6usingSystem;
7usingSystem.Collections.Generic;
8usingSystem.ComponentModel;
9usingSystem.Text;
10usingSystem.Web;
11usingSystem.Web.UI;
12usingSystem.Web.UI.WebControls;
13usingSystem.Web.UI.HtmlControls;
14
15namespaceTraceMenu
16{
17[DefaultProperty("TargetControl")]
18[ToolboxData("<{0}:PopupTraceMenurunat=server></{0}:PopupTraceMenu>")]
19[ParseChildren(true,"Items")]
20[PersistChildren(false)]
21publicclassPopupTraceMenu:Control
22{
23#region类变量
24
25privateFloatMenu_Items=newFloatMenu();
26
27#endregion
28
29#region属性
30
31///<summary>
32///菜单变量,其用于存放子菜单项集合
33///</summary>
34[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
35[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
36[Description("获取或设置菜单项集合")]
37[Category("杂项")]
38[NotifyParentProperty(true)]
39[TypeConverter(typeof(CollectionConverter))]
40[DesignOnly(false)]
41publicFloatMenuItems
42{
43get
44{
45if(_Items==null)
46{
47_Items=newFloatMenu();
48}
49return_Items;
50}
51}
52
53///<summary>
54///获取或设置菜单
55///</summary>
56[Browsable(false)]
57[Description("获取或设置菜单")]
58publicFloatMenuMenu
59{
60get
61{
62return_Items;
63}
64set
65{
66this._Items.Clear();
67foreach(FloatMenuItemiteminvalue)
68{
69this._Items.Add(item);
70}
71}
72}
73
74///<summary>
75///设置此控件的目标(寄主)控件
76///</summary>
77[Bindable(true)]
78[Category("数据")]
79[DefaultValue("")]
80[Description("设置此控件的目标(寄主)控件")]
81[TypeConverter(typeof(ControlIDConverter))]
82publicstringTargetControl
83{
84get
85{
86Strings=(String)ViewState["TargetControl"];
87return((s==null)?String.Empty:s);
88}
89set
90{
91ViewState["TargetControl"]=value;
92}
93}
94
95[Browsable(true)]
96[Category("CSS样式")]
97[Description("获取或设置控件的OnMouseOver样式")]
98publicstringCSS_ONMOUSEOVER_CLASSNAME
99{
100get
101{
102strings=(string)ViewState["CSS_ONMOUSEOVER"];
103return((s==null)?String.Empty:s);
104}
105set
106{
107ViewState["CSS_ONMOUSEOVER"]=value;
108}
109}
110[Browsable(true)]
111[Category("CSS样式")]
112[Description("获取或设置控件的OnMouseOut样式")]
113publicstringCSS_ONMOUSEOUT_CLASSNAME
114{
115get
116{
117strings=(string)ViewState["CSS_ONMOUSEOUT"];
118return((s==null)?String.Empty:s);
119}
120set
121{
122ViewState["CSS_ONMOUSEOUT"]=value;
123}
124}
125
126#endregion
127
128#region方法
129
130protectedoverridevoidCreateChildControls()
131{
132base.CreateChildControls();
133}
134
135protectedoverridevoidOnPreRender(EventArgse)
136{
137//GridView增加FloatMenu
138WebControltargetControl=(WebControl)this.FindControl(TargetControl);
139//给GridView头增加FloatMenu
140//ControltargetControl=this.FindControl(TargetControl).Controls[0].Controls[0];
141
142//注册HiddenField字段,用于存储数据绑定控件,行的键值:DataRowKey.
143Page.ClientScript.RegisterHiddenField("hidden_row_key","");
144
145if(!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(),"BuildMenu"))
146{
147Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"BuildMenu",
148"<scripttype='text/javascript'src='TraceMenuJScript.js'></script>");
149}
150
151
152///<summary>
153///注册菜单项动态添加脚本
154///<summary>
155StringBuilderstrAddMenuItemScript=newStringBuilder();
156if(this.Items.Count!=0)
157{
158
159strAddMenuItemScript.Append("functionmakeMenu"+this.UniqueID+"()");
160strAddMenuItemScript.Append("{");
161strAddMenuItemScript.Append("varmyMenu,item;");
162strAddMenuItemScript.Append("");
163strAddMenuItemScript.Append("");
164strAddMenuItemScript.Append("popupMenu_divs='';");
165strAddMenuItemScript.Append("myMenu=newfloatMenu();");
166strAddMenuItemScript.Append("");
167foreach(FloatMenuItemiteminthis.Items)
168{
169stringstrImageSrc;
170try
171{
172strImageSrc=item.ImageSrc+string.Empty==string.Empty?"":base.ResolveUrl(item.ImageSrc);
173}
174catch
175{
176strImageSrc="";
177}
178
179stringstrCommand;
180try
181{
182strCommand=item.Command.Trim().Replace("\"","'").Replace("&nbsp;","");
183}
184catch
185{
186strCommand=null;
187}
188
189
190////添加自定义款项的<DIV>容器
191if(item.Type.ToString().ToUpper()=="CUSTOM")
192{
193stringstrClientID=item.Control.ClientID;
194strAddMenuItemScript.Append("varstrDiv;popupMenu_divs+='DIV_"+strClientID+",';");
195strAddMenuItemScript.Append("strDiv=\"<divid='DIV_"+strClientID+"'"+"style='BACKGROUND-COLOR:#ffffff;BORDER:#0000001pxsolid;TOP:0px;LEFT:0px;Z-INDEX:15;POSITION:absolute;display:none;'>\";");
196strAddMenuItemScript.Append("strDiv+='</div>';");
197strAddMenuItemScript.Append("document.write(strDiv);");
198}
199
200stringstrClientId=item.Control!=null?item.Control.ClientID:"";
201
202strAddMenuItemScript.Append("item=newfloatItem('"+((item.Text+string.Empty==string.Empty)?"":item.Text)+"','"+strImageSrc+"',\""+(strCommand+string.Empty==string.Empty?"":strCommand)+"\",'"+item.Type+"','"+strClientId+"','"+this.CSS_ONMOUSEOVER_CLASSNAME+"','"+this.CSS_ONMOUSEOUT_CLASSNAME+"');");
203strAddMenuItemScript.Append("myMenu.addItem(item);");
204}
205strAddMenuItemScript.Append("");
206strAddMenuItemScript.Append("myMenu.show(this.document,popupMenu_divs,'"+this.UniqueID+"');");
207strAddMenuItemScript.Append("");
208strAddMenuItemScript.Append("deleteitem;");
209strAddMenuItemScript.Append("deletemyMenu;");
210strAddMenuItemScript.Append("}");
211}
212else
213{
214strAddMenuItemScript.Append("functionmakeMenu"+this.UniqueID+"()");
215strAddMenuItemScript.Append("{");
216//strAddMenuItemScript.Append("alert('NoSetItemsProperty!');");
217strAddMenuItemScript.Append("}");
218}
219
220if(!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(),"AddMenuItemScript"+this.UniqueID))
221{
222Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"AddMenuItemScript"+this.UniqueID,strAddMenuItemScript.ToString(),true);
223}
224
225
226///<summary>
227///注册初始化脚本
228///<summary>
229StringBuilderstrInitScript=newStringBuilder();
230if(targetControl!=null)
231{
232strInitScript.Append("<scripttext/javascript>");
233strInitScript.Append("makeMenu"+this.UniqueID+"();varobj;");
234strInitScript.Append("if(document.all&&window.print)");
235strInitScript.Append("{");
236strInitScript.Append("varobjClientId='"+targetControl.ClientID+"';");
237strInitScript.Append("if(objClientId!=null)");
238strInitScript.Append("{");
239strInitScript.Append("obj=document.getElementById(objClientId);");
240strInitScript.Append("obj.style.cursor='default';");
241strInitScript.Append("document.onclick=forcehideMenu;");
242
243if(targetControl.GetType().Name!="GridView")//临时修改为:"=="
244{
245targetControl.Attributes.Add("onmouseenter","showMenu('"+this.UniqueID+"');");
246strInitScript.Append("obj.onmousemove=moveMenu;");
247}
248strInitScript.Append("obj.onmouseleave=hideMenu;");
249strInitScript.Append("obj.oncontextmenu=showMenu;");
250strInitScript.Append("}");
251strInitScript.Append("else{alert('PleaseSetTargetControlProperty!')}");
252strInitScript.Append("}");
253strInitScript.Append("</script>");
254}
255
256if(!Page.ClientScript.IsStartupScriptRegistered(this.GetType(),"InitScript"+this.UniqueID))
257{
258Page.ClientScript.RegisterStartupScript(this.GetType(),"InitScript"+this.UniqueID,
259strInitScript.ToString());
260}
261
262///<summary>
263///给数据绑定控件的行(DataRow)注册弹出悬浮菜单脚本
264///<summary>
265if(targetControl!=null)
266{
267switch(targetControl.GetType().Name.ToUpper())
268{
269case"GRIDVIEW":
270{
271GridViewgv=(GridView)targetControl;
272
273for(inti=0;i<gv.Rows.Count;i++)
274{
275objectkey=gv.DataKeys[i].Value;
276//gv.Rows[i].Attributes.Add("onmouseenter","window.status='表格控件的当前行主键为:"+key+"';"+"showRowMenu('"+key+"','"+this.UniqueID+"')");
277gv.Rows[i].Attributes.Add(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值