自定义服务器控件之:日历 DateBox 控件
2007-08-09 20:27
344 查看
之前一直在使用梅花雨日历控件作为日历输入,但是在.Net 使用时发现几个问题:
1:每次在日历框后面都要写一个图像等代码;
2:如果用户没有输入数据在服务器取值时还要先判断;
为了解决以上两个问题所以写了如下的控件:
该控件使用简单只有直接拖拽到页面即可,取赋值时全部使用Value属性。
请注意:为了方便替换日历控件,控件JS并没有包含在Dll中,所以页面必须包含 日历控件 的 JS
MicroSystem.WebControls.Datebox 日期文本框(IE5+):
自带了日历选择功能(日历使用了梅花雨日历控件)
<msi:DateBox ID="OpenDate" runat="server" CssClass="SetDate" MustInput="true"></msi:DateBox>
Imports System.ComponentModel
Imports System.Web.UI
Imports ASP = System.Web.UI.WebControls
Imports MicroSystem.WebControls
''' <summary>
''' 日期文本框
''' </summary>
''' <remarks>
''' <example>
''' <code>
''' <msi:DateBox ID="OpenDate" runat="server" CssClass="SetDate" ></msi:DateBox>
''' </code>
''' </example>
''' 2007-7-3 <br />
''' 需要改进:当文本框为 Enabled = false 或者 readonly = true 时 隐藏日历Img <br />
''' 当postback 时不能再显示Img,暂未实现上述功能;可以考虑在客户端用 HTC 实现
''' </remarks>
<DefaultProperty("Value")> _
<ToolboxData("<{0}:DateBox runat=server CssClass=SetDate></{0}:DateBox>")> _
Public Class DateBoxClass DateBox
Inherits BaseBox
''' <summary>
''' 获取或设置日期
''' </summary>
''' <returns>如空返回 Nothing</returns>
<Browsable(True)> _
<Bindable(False)> _
<Category("Appearance")> _
<DefaultValue("")> _
<Localizable(True)> _
<Description("返回日期,如空返回 Nothing ")> _
Property Value()Property Value() As Date
Get
If Me.Text = "" Then
Return Nothing
Else
Return CDate(Me.Text)
End If
'Return IIf(Me.Text = "", Nothing, CDate(Me.Text))
End Get
Set(ByVal value As Date)
If value.Year > 1 Then
Me.Text = Format(value, "yyyy-MM-dd")
End If
End Set
End Property
''' <summary>
''' 获取控件的行为模式(单行)
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks>只读</remarks>
<Browsable(False)> _
<Bindable(False)> _
Public Shadows ReadOnly Property TextMode()Property TextMode() As ASP.TextBoxMode
Get
Return ASP.TextBoxMode.SingleLine
End Get
End Property
Protected Overrides Sub Render()Sub Render(ByVal writer As HtmlTextWriter)
MyBase.AddAttributesToRender(writer)
writer.RenderBeginTag(HtmlTextWriterTag.Input)
writer.RenderEndTag()
'If Me.Enabled And Me.ReadOnly Then '
'writer.Write("<img src='images/date.gif' alt=""点击选择日期"" onclick=""setday(this,document.getElementById('" + Me.ClientID + "'))"" />")
writer.AddAttribute(HtmlTextWriterAttribute.Src, Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MicroSystem.WebControls.date.gif"))
writer.AddAttribute(HtmlTextWriterAttribute.Alt, "点击选择日期")
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "setday(this,document.getElementById('" + Me.ClientID + "'))")
writer.AddAttribute(HtmlTextWriterAttribute.Class, "link")
writer.RenderBeginTag(HtmlTextWriterTag.Img)
writer.RenderEndTag()
'End If
If Me.MustInput Then
'MyBase.RFVMustInput = New ASP.RequiredFieldValidator
MyBase.RFVMustInput.RenderControl(writer)
End If
' MyBase.Render(writer)
End Sub
End Class
1:每次在日历框后面都要写一个图像等代码;
2:如果用户没有输入数据在服务器取值时还要先判断;
为了解决以上两个问题所以写了如下的控件:
该控件使用简单只有直接拖拽到页面即可,取赋值时全部使用Value属性。
请注意:为了方便替换日历控件,控件JS并没有包含在Dll中,所以页面必须包含 日历控件 的 JS
MicroSystem.WebControls.Datebox 日期文本框(IE5+):
自带了日历选择功能(日历使用了梅花雨日历控件)
<msi:DateBox ID="OpenDate" runat="server" CssClass="SetDate" MustInput="true"></msi:DateBox>
Imports System.ComponentModel
Imports System.Web.UI
Imports ASP = System.Web.UI.WebControls
Imports MicroSystem.WebControls
''' <summary>
''' 日期文本框
''' </summary>
''' <remarks>
''' <example>
''' <code>
''' <msi:DateBox ID="OpenDate" runat="server" CssClass="SetDate" ></msi:DateBox>
''' </code>
''' </example>
''' 2007-7-3 <br />
''' 需要改进:当文本框为 Enabled = false 或者 readonly = true 时 隐藏日历Img <br />
''' 当postback 时不能再显示Img,暂未实现上述功能;可以考虑在客户端用 HTC 实现
''' </remarks>
<DefaultProperty("Value")> _
<ToolboxData("<{0}:DateBox runat=server CssClass=SetDate></{0}:DateBox>")> _
Public Class DateBoxClass DateBox
Inherits BaseBox
''' <summary>
''' 获取或设置日期
''' </summary>
''' <returns>如空返回 Nothing</returns>
<Browsable(True)> _
<Bindable(False)> _
<Category("Appearance")> _
<DefaultValue("")> _
<Localizable(True)> _
<Description("返回日期,如空返回 Nothing ")> _
Property Value()Property Value() As Date
Get
If Me.Text = "" Then
Return Nothing
Else
Return CDate(Me.Text)
End If
'Return IIf(Me.Text = "", Nothing, CDate(Me.Text))
End Get
Set(ByVal value As Date)
If value.Year > 1 Then
Me.Text = Format(value, "yyyy-MM-dd")
End If
End Set
End Property
''' <summary>
''' 获取控件的行为模式(单行)
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks>只读</remarks>
<Browsable(False)> _
<Bindable(False)> _
Public Shadows ReadOnly Property TextMode()Property TextMode() As ASP.TextBoxMode
Get
Return ASP.TextBoxMode.SingleLine
End Get
End Property
Protected Overrides Sub Render()Sub Render(ByVal writer As HtmlTextWriter)
MyBase.AddAttributesToRender(writer)
writer.RenderBeginTag(HtmlTextWriterTag.Input)
writer.RenderEndTag()
'If Me.Enabled And Me.ReadOnly Then '
'writer.Write("<img src='images/date.gif' alt=""点击选择日期"" onclick=""setday(this,document.getElementById('" + Me.ClientID + "'))"" />")
writer.AddAttribute(HtmlTextWriterAttribute.Src, Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MicroSystem.WebControls.date.gif"))
writer.AddAttribute(HtmlTextWriterAttribute.Alt, "点击选择日期")
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "setday(this,document.getElementById('" + Me.ClientID + "'))")
writer.AddAttribute(HtmlTextWriterAttribute.Class, "link")
writer.RenderBeginTag(HtmlTextWriterTag.Img)
writer.RenderEndTag()
'End If
If Me.MustInput Then
'MyBase.RFVMustInput = New ASP.RequiredFieldValidator
MyBase.RFVMustInput.RenderControl(writer)
End If
' MyBase.Render(writer)
End Sub
End Class
相关文章推荐
- 发布首款支持Shift/Ctrl多选的国产日历控件,界面仿Twitter风格,支持中文日期类型,支持SImpleDateFormat格式,支持change等自定义事件,全中文注释和API,欢迎支持
- 发布首款支持Shift/Ctrl多选的国产日历控件,界面仿Twitter风格,支持中文日期类型,支持SImpleDateFormat格式,支持change等自定义事件,全中文注释和API,欢迎支持
- [自定义服务器控件] 第二步:下拉列表框。
- 自定义View之_日历控件
- easyui-datebox 日期控件 只显示年月 不显示日
- Jquery UI的日历控件datepicker限制日期(转)
- Android 自定义价格日历控件
- freeCalendar-自定义日历控件
- Jquery UI的日历控件datepicker限制日期
- 开发和使用自定义服务器控件
- 给EasyUI的DateBox控件添加清除button
- 演练:开发和使用自定义服务器控件
- [自定义服务器控件] 第一步:文本框。
- bootstrap之双日历时间段选择控件—daterangepicker(汉化版)
- 自定义Flex日历控件
- 开发和使用自定义服务器控件 (二)
- Android 自定义实现日历控件
- 100%托管代码自定义服务器控件ASP.NET Barcode Web Server Control
- 缺省HTMLFORM导致自定义服务器控件脚本无法注册
- 在SharePoint中使用自定义的服务器控件(Web Control)