象http://blog.mvpcn.net/yangyun_99/ 右边的那个日历。
如果有事件的话那天的日期上就可以有个连接,没有事件就什么没有连接,只有一个时间提示.
这样的日历怎么实现?可以提供源码或是思路吗??

解决方案 »

  1.   

    我是这样做的。
    <script language="vb" runat="server">
    sub Cal_Render(sender as Object,e as DayRenderEventArgs)
    e.Cell.Controls.Clear()
    'e.Day.IsSelectable = false '删除日期的连接
    dim vlink as new HyperLink()
    vlink.Text = e.Day.DayNumberText
    If e.Day.IsWeekend Then
    vlink.ForeColor = System.Drawing.Color.red
    else
    vlink.ForeColor = System.Drawing.Color.black
    end if dim dbconn as new Oledbconnection("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath("db.mdb"))
    dbconn.open()
    dim dbcmd as new OledbCommand("select * from blog order by id desc",dbconn)
    Dim dbRead as Object = dbcmd.ExecuteReader()
    if datevalue(dbRead.GetValue(3)) = e.day.date then ' 当数据库里有相关日期的记录的时候就显示连接
    vlink.NavigateUrl = "a.aspx?date=" & e.day.date
    end if
    e.Cell.Controls.add(vlink) if e.Day.IsOtherMonth then '删除不是这个月的日期
    e.Cell.Controls.Clear()
    end if If e.Day.IsWeekend Then '星期天显示的的日期为红色
    e.Cell.ForeColor = System.Drawing.Color.red
    End If
    end sub
    </script>这样不行。每次DayRender的时候一个月有30天。那么
    dim dbconn as new Oledbconnection("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath("db.mdb"))
    dbconn.open()
    dim dbcmd as new OledbCommand("select * from blog order by id desc",dbconn)
    Dim dbRead as Object = dbcmd.ExecuteReader()
    就要执行30次。这样页面就会出错了。什么方法可以只让他执行一次啊??
    还有什么办法能做啊??大家为何都不响应一下呢?
      

  2.   

    adminyao(程序傻子) 
    帮帮我只有你帮我了。哎~~~
      

  3.   

    你这样试试行不行?先把数据库里面有相关上期的资料读出来,存放到一数组里面{4,7,14,18,29}。然后,再在DayRender个事件里面,在数组里面查找,如果有相应的日期,再就加链接。
      

  4.   

    private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
    {
    if (e.Day.Date == DateTime.Today)
    e.Cell.Text = "<a href='ab.aspx'>23" + e.Day.Date + "</a>";
    }
      

  5.   

    forideal(我心飞翔) 你这个是在当天加个连接啊
    我是要数据库中。纪录中的日期对应日历中的日期啊。
      

  6.   

    Public tmp_str As String    ‘定义一个全局变量,用来存放从数据库中的日期,并串成字符串
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        
            tmp_str = "1,,,5,,,9,,,14,,,18"   ‘我这里假设你将从数据库中读出来的日期的天取出来,串好
        End Sub
    Private Sub Calendar2_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles Calendar2.DayRender
            e.Cell.Controls.Clear()
            e.Day.IsSelectable = False
            Dim flag As Integer
            flag = InStr(tmp_str, Day(e.Day.Date).ToString)        Dim vlink As New HyperLink
            vlink.Text = e.Day.DayNumberText
            If flag <> 0 Then
                vlink.NavigateUrl = "a.aspx?date=" & e.Day.Date
                e.Cell.Controls.Add(vlink)
            Else
                e.Cell.Controls.Add(vlink)
            End If
            If e.Day.IsOtherMonth Then '
                e.Cell.Controls.Clear()
            End If
        End Sub试一试,看行不行,
      

  7.   

    不好意思,这样用查找的方法可能有BUG,你必须用数组存放,然后严格的比较。因为现在这样子,如果里面”3,,,15,,,18”现在没有1号,但是,1在里面能够找到,所以这样子就有错,你自己再按照这种思路用数组进行操作。
      

  8.   

    不行,不会吧,我这边OK哦
    Public Arr_tmp(10) As String
    Public i As IntegerPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            For i = 0 To 10
                Arr_tmp(i) = i * 2
            Next
        End SubPrivate Sub Calendar2_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles Calendar2.DayRender
            e.Cell.Controls.Clear()
            e.Day.IsSelectable = False
            Dim flag As Integer
            flag = 1
            For i = 0 To 6
                If Arr_tmp(i) = Day(e.Day.Date) Then
                    flag = 0
                End If
            Next        Dim vlink As New HyperLink
            vlink.Text = e.Day.DayNumberText
            If flag = 0 Then
                vlink.NavigateUrl = "a.aspx?date=" & e.Day.Date
                e.Cell.Controls.Add(vlink)
            Else
                e.Cell.Controls.Add(vlink)
            End If
            If e.Day.IsOtherMonth Then '
                e.Cell.Controls.Clear()
            End If
        End Sub
      

  9.   

    你这样是可以的啊。
    如果我数据库里有100条记录
    那么Public Arr_tmp(100) As String
    怎么样写啊。 你结合一个数据库来写写看啊。
    怎么样动态对Arr_tmp(数据库的记录总数)付值。就这里我不会啊。。
    是不是说得不清楚?
      

  10.   

    汗!!
    Conn是你的数据库连接
    Strsql=“你的SQL语句”
    Dim MyCommand As SqlCommand = New SqlCommand(strsql, conn)
    conn.Open()
    Dim dr As SqlDataReader = MyCommand.ExecuteReader
    Dim j as integer
    Do While (dr.Read())
    Arr_tmp(j)= day(dr("date"))
    J=j+1
    Loop
      

  11.   

    这个我知道。。问题是Public Arr_tmp(100) As String 怎么定义啊。。
    Arr_tmp(数据库记录的数量)
    难道就直接给他一个固定的Arr_tmp(10)??
    你有MSN或QQ吗。给我啊。我们那里聊聊。呵呵。。
      

  12.   

    可以了。 完成OK。 跪谢adminyao(程序傻子)