Avatar billede martin_moth Mester
22. januar 2004 - 16:08 Der er 15 kommentarer og
2 løsninger

Calender - marker datoer med aftaler

Jeg har tyvstjålet noget kode der læser aftaler fra et XML-dokument ind i et calender object på en aspx-side. Virker perfekt, og jeg tror endda jeg forstår koden.

Men hvordan markerer jeg de dage i min kalender, hvor der er aftaler?

  <asp:Calendar id="Calendar1" runat="server" SelectedDate="2002-07-15" OnSelectionChanged="Calendar1_SelectionChanged" _="_" BorderWidth="1px" NextPrevFormat="FullMonth"  Width="250px" ForeColor="Black" Height="190px" Font-Size="9pt" Font-Names="Verdana" BorderColor="White">
                                    <TodayDayStyle backcolor="#CCCCCC"></TodayDayStyle>
                                    <NextPrevStyle font-size="8pt" font-bold="True" forecolor="#333333" verticalalign="Bottom"></NextPrevStyle>
                                    <DayHeaderStyle font-size="8pt" font-bold="True"></DayHeaderStyle>
                                    <SelectedDayStyle forecolor="White" backcolor="#333399"></SelectedDayStyle>
                                    <TitleStyle font-size="12pt" font-bold="True" borderwidth="4px" forecolor="#333399" bordercolor="Black" backcolor="White"></TitleStyle>
                                    <OtherMonthDayStyle forecolor="#999999"></OtherMonthDayStyle>
                                </asp:Calendar>
Avatar billede martin_moth Mester
22. januar 2004 - 16:28 #1
Mere overskueligt & komplet:

<------------- START tst.aspx ------------->

<%@ Page  %>
<%@ import Namespace="System.Data" %>
<script runat="server">

Sub Opdater(dato)
  dim myCalender=New DataSet
  myCalender.ReadXml(MapPath("MyCalendar.xml"))
  Dim MyTable As DataTable
  MyTable = New DataTable
  MyTable = myCalender.Tables(0)
  Dim numrows as integer = MyTable.Rows.Count
  Dim objResults() As DataRow
  Dim strFilterExpr as String = "EventDate LIKE '" & Dato & "'"
  Dim strSortString as String = "StartTime"
  objResults = Mytable.Select(strFilterExpr, strSortString) 
  Dim objRow As DataRow
  Dim strResult As String = "<table>"
  strResult +="<td><b>Emne</td>"
  strResult +="<td><b>Dato</td>"
  strResult +="<td><b>Start</td>"
  strResult +="<td><b>Slut</td></tr>"
  Dim res as Boolean = False
  For Each objRow In objResults
    res = True
    strResult += "<tr><td>&nbsp; " & objRow(1) _
          & "</td><td>&nbsp; " & objRow(2) & "</td></td><td>&nbsp; " & objRow(3) _
          & "</td></td><td>&nbsp; " & objRow(4) & "</td></tr>"
  Next
  strResult +="</table>"
  if Not res then strResult = "..."
  outResults.innerHTML = strResult
  End Sub

Sub Calendar1_SelectionChanged(sender As Object, e As EventArgs)
  Dim Dato as DateTime = calendar1.SelectedDate
  Dim strDato as String = Dato.ToString("yyyy-MM-dd")
  Opdater(strDato)
End Sub
</script>

<html>
<head>
</head>
<body>
<asp:Calendar id="Calendar1" runat="server"
  OnSelectionChanged="Calendar1_SelectionChanged" NextPrevFormat="FullMonth">
  <TodayDayStyle backcolor="#CCCCCC"></TodayDayStyle>
  <NextPrevStyle font-size="8pt" verticalalign="Bottom"></NextPrevStyle>
  <DayHeaderStyle font-size="8pt"></DayHeaderStyle>
  <SelectedDayStyle forecolor="White" backcolor="#333399"></SelectedDayStyle>
  <TitleStyle font-size="12pt"></TitleStyle>
  <OtherMonthDayStyle forecolor="#999999"></OtherMonthDayStyle>
</asp:Calendar>
</body>
</html>

<----------- SLUT test.aspx --------->

Jeg vil så gerne markere de datoer i kalenderen hvor der er hentet en aftale i MyCalender.xml  ?
Avatar billede burningice Nybegynder
22. januar 2004 - 16:33 #2
du skal bruge Render-eventen. Eksempel:

        private void calEvents_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
        {
            DateTime date = e.Day.Date;
           
            if (ec.Contains(date))
            {
                e.Cell.CssClass = "Cal-Event";
            }
            else
            {
                e.Day.IsSelectable = false;
            }
        }

her er ec en collection over alle mine events
Avatar billede martin_moth Mester
22. januar 2004 - 16:36 #3
Ny er jeg endnu på kravlestadiet...

Derfor:

Ovenstående, er det C# eller ..? Det ligner ikke min kode...

Har du et link til samme kode i VB.NET-kode?
Avatar billede martin_moth Mester
22. januar 2004 - 16:38 #4
HAr fundet eksempel i VB.NET på msdn... vender tilbage
Avatar billede martin_moth Mester
22. januar 2004 - 16:45 #5
Hmm

Jeg fatter ikke helt den DayRender - hvornår bliver den triggeret, og hvordan får jeg renderet alle dage fra min XML-kalender?

Fra MSDN:
Sub DayRender(source As Object, e As DayRenderEventArgs)
If e.Day.Date.Day = 18 Then
    e.Cell.Controls.Add(New LiteralControl(ChrW(60) & "br" & ChrW(62) & "Holiday"))
  End If
End Sub

Ovenstående laver alle d. 18 om, så der står Holiday. Jeg skal lave min kalender så alle datoer fra mit xml-dokument bliver fede..?
Avatar billede martin_moth Mester
22. januar 2004 - 16:48 #6
Jeg skal have koblet objResults og e.Day.Date....
Avatar billede burningice Nybegynder
22. januar 2004 - 16:49 #7
den bliver triggered hver gang, som navnet antyder, en dag bliver renderet i din calendar. Dvs. at du kan nå at lave nogle last-minute changes på dagen.

1) du skal have en måde hvorpå du kan checke om en given dato findes i dit xml-dokument. De kan evt. gøres ved at loope igennem alle dine datoer for hver dag i kalenderen, og checke om de stemmer overens.
2) du kan bruge style til at lave teksten bold
3) måske lidt grundlæggende programmering ville være på sin plads.
Avatar billede burningice Nybegynder
22. januar 2004 - 16:53 #8
Sub DayRender(source As Object, e As DayRenderEventArgs)

dim myCalender=New DataSet
  myCalender.ReadXml(MapPath("MyCalendar.xml"))
  Dim MyTable As DataTable
  MyTable = New DataTable
  MyTable = myCalender.Tables(0)
  Dim objRow As DataRow
    For Each objRow In MyTable.Rows

    If objRow(2) = e.Day.Date Then

        e.Cell.CssClass = "fed"
    End If
   
    Next

End Sub
Avatar billede thor.ostergaard Nybegynder
22. januar 2004 - 17:26 #9
Avatar billede martin_moth Mester
23. januar 2004 - 10:28 #10
cyberfessor: ad 3) Var det en sarkastisk bemærkning? Jeg vælger at tage det som en venlig ment opfordring, og tilføjer, at jeg har programmeret en hel masse i VB6, men er ny i .NET. Og det ER altså ikke helt det samme. Derfor måske lidt dumme spørgsmål. Beklager...

thor.ostergaard: Lækkert eksempel.

I deler sådan nogenlunde - OK?
Avatar billede martin_moth Mester
23. januar 2004 - 10:28 #11
Altså hvis I smider svar!
Avatar billede burningice Nybegynder
23. januar 2004 - 10:39 #12
martin_moth>> grundlæggende .Net programmering så. Events er trods alt en meget fundemental ting, som er rare at have styr på :)
Avatar billede thor.ostergaard Nybegynder
23. januar 2004 - 10:45 #13
fint nok med mig
Avatar billede martin_moth Mester
23. januar 2004 - 10:59 #14
Jeg ved da godt hvad en event er - ellers ville det vel være svært at programmere i et event-driven sprog som VB6...

Men når jeg tager hul på .NET kan selv en lillebitte ting være nok så svær at få styr på - fx. at forstå hvordan man får vist alle datoer, der matcher datoer i et XML-dokument, som fed. Og det er vel det eksperten er til for? Nu har jeg tjent >5000p og opsparet >4000p, så kan jeg vel godt begynde at bruge lidt af dem ;o)
Avatar billede martin_moth Mester
23. januar 2004 - 11:01 #15
Sorry - tjent >17000, ikke >5000 (bare for grundighedens skyld:o)
Avatar billede burningice Nybegynder
23. januar 2004 - 11:07 #16
jo... vb6 er eventdriven... men alt sammen foregår behind-the-scene... man kan ikke umiddelbart definere sine egne events eller hvad de skal hedde. har været ud for personer der ikke ANEDE hvad OOP eller Events var, men kunne lave rimelig store og komplekse programmer i vb6.
Avatar billede martin_moth Mester
23. januar 2004 - 11:10 #17
OK

Jeg programmerer skam også objektorienteret i VB6 (i den grad at man kan) :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester