Et site med kursusmaterialer, der bruges i forbindelse med undervisning i forskellige it relaterede emnerEn skøn grafik du kan nyde mens der undervises.
   

Send spørgsmål eller kommentar til Thor - klik her: Send en kommentar til Thor - omkring undervisning eller kursus  Søg i kursusmaterialerne. Kan bruges i forbindelse med undervisningen eller efter kurset  Til forsiden af kursusmaterialer.dk 

 

ASP.NET II / Kalender kontrollen / Et lille kodeeksempel


ASP.NET fjernundervisningskursus

- Vil du gerne på kursus NU?

- Vil du gerne lære i dit eget tempo?

- Har du ikke tid til at tage på kursus ude i byen?

Så køb et kursus i ASP.NET som fjernundervisning på www.it-fjernundervisning.dk


Kalender kontrollen.

Nedenfor findes et lille kodeeksempel på anvendelse af kalender kontrollen.

HTML'en

Først den html jeg har skrevet:

<HTML>
 <HEAD>
  <title>Kalender</title>
  <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
  <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie3-2nav3-0">
 </HEAD>
 <body MS_POSITIONING="FlowLayout">
  <form id="Form1" method="post" runat="server">
   <P>
    <asp:calendar id="Kalender" runat="server" SelectionMode="DayWeekMonth"
BorderWidth="1px" NextPrevFormat="FullMonth" BackColor="White" Width="844px"
ForeColor="Black" Height="190px" Font-Size="9pt" Font-Names="Verdana" BorderColor="White">
     <TodayDayStyle backcolor="#CCCCCC"></TodayDayStyle>
     <DayStyle horizontalalign="Left" verticalalign="Top"></DayStyle>
     <NextPrevStyle font-size="8pt" font-bold="True" forecolor="#333333" verticalalign="Bottom"></NextPrevStyle>
     <DayHeaderStyle font-size="8pt" font-bold="True" horizontalalign="Left" verticalalign="Top"></DayHeaderStyle>
     <SelectedDayStyle forecolor="White" backcolor="#333399"></SelectedDayStyle>
     <TitleStyle font-size="12pt" font-bold="True" borderwidth="4px" forecolor="#333399"
bordercolor="Black" backcolor="White"></TitleStyle>
     <WeekendDayStyle backcolor="#FFE0C0"></WeekendDayStyle>
     <OtherMonthDayStyle forecolor="#999999"></OtherMonthDayStyle>
    </asp:calendar></P>
   <P>
    <asp:Label id="lblValgtDato" runat="server"></asp:Label></P>
   <P>
    <asp:panel id="AftalePanel" runat="server">
     <asp:repeater id="AftaleRepeater" runat="server">
      <HeaderTemplate>
       <p align="left">
        <table border="1" width="100%">
         <table style="color:Black;border collapse:collapse;">
          <tr style="color:Black;font-weight:bold;">
           <td>
            <b>Aftale</b></td>
           <td>
            <b>Detaljer</b></td>
           <td>
            <b>Start</b></td>
           <td>
            <b>Slut</b></td>
          </tr>
      </HeaderTemplate>
      <ItemTemplate>
       <tr style="background-color:White;">
        <td>
         <%# DataBinder.Eval(Container.DataItem, "KortBeskrivelse") %>
        </td>
        <td>
         <%# DataBinder.Eval(Container.DataItem, "LangBeskrivelse")%>
        </td>
        <td>
         <%# DataBinder.Eval(Container.DataItem, "StartTid") %>
        </td>
        <td>
         <%# DataBinder.Eval(Container.DataItem, "SlutTid") %>
        </td>
       </tr>
      </ItemTemplate>
      <AlternatingItemTemplate>
       <tr style="background-color:Gainsboro;">
        <td>
         <%# DataBinder.Eval(Container.DataItem, "KortBeskrivelse") %>
        </td>
        <td>
         <%# DataBinder.Eval(Container.DataItem, "LangBeskrivelse")%>
        </td>
        <td>
         <%# DataBinder.Eval(Container.DataItem, "StartTid") %>
        </td>
        <td>
         <%# DataBinder.Eval(Container.DataItem, "SlutTid") %>
        </td>
       </tr>
      </AlternatingItemTemplate>
      <FooterTemplate>
    </table>
   </P>
   </FooterTemplate> </asp:repeater></asp:panel></P>
   <P>
    <asp:Button id="cmdOpretAftale" runat="server" Text="Opret aftale"></asp:Button></P>
   <P>
    <asp:Panel id="OpretAftalePanel" runat="server" Visible="False">
<TABLE border="0">
      <TR>
       <TD vAlign="top">Dato</TD>
       <TD vAlign="top">
        <asp:TextBox id="txtStartDato" runat="server"></asp:TextBox>&nbsp; kl.</TD>
       <TD vAlign="top">
        <asp:TextBox id="txtStartTid" runat="server"></asp:TextBox>
        <P></P>
       </TD>
      </TR>
      <TR>
       <TD vAlign="top">Slut dato:</TD>
       <TD vAlign="top">
        <asp:TextBox id="txtSlutDato" runat="server"></asp:TextBox>&nbsp;kl.</TD>
       <TD vAlign="top">
        <asp:TextBox id="txtSlutTid" runat="server"></asp:TextBox>
        <P></P>
       </TD>
      </TR>
      <TR>
       <TD vAlign="top">Aftale:</TD>
       <TD vAlign="top" colSpan="2">
        <asp:TextBox id="txtNavn" runat="server"></asp:TextBox>
        <P></P>
       </TD>
      </TR>
      <TR>
       <TD vAlign="top">Detaljer:</TD>
       <TD vAlign="top" colSpan="2">
        <asp:TextBox id="txtKommentar" runat="server"></asp:TextBox></TD>
      </TR>
     </TABLE>
<asp:Button id="cmdOpret" runat="server" Text="Opret!"></asp:Button>&nbsp;
<asp:Button id="cmdFortryd" runat="server" Text="Fortryd"></asp:Button>
</asp:Panel></P>
  </form>
 </body>
</HTML>

Dernæst kodedelen.

Bemærk, at det er skrevet i Visual Studio .NET, men det skulle være en overkommelig opgave, at skrive det over i web-matrix

Imports System.Data
Imports System.IO 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not Page.IsPostBack Then
            Kalender.SelectedDate = Today()
            VisKalenderIndhold()
        End If
    End Sub
 
    Protected Sub VisKalenderIndhold()
        Dim dataSet As dataSet = IndlaesKalenderData()
        If dataSet Is Nothing Then
            Exit Sub
        End If
 
        ' Bind data til repeater kontrollen
        Dim DagensData As dataSet
        DagensData = HentDagensAftaler(dataSet, Kalender.SelectedDate)
 
        AftaleRepeater.DataSource = DagensData
        AftaleRepeater.DataBind()
 
        If (DagensData.Tables(0).Rows.Count > 0) Then
            AftalePanel.Visible = True
            lblValgtDato.Text = "Detaljer for " + Kalender.SelectedDate.ToLongDateString() + ":"
        Else
            AftalePanel.Visible = False
            lblValgtDato.Text = "Der er ingen aftaler den " + Kalender.SelectedDate.ToLongDateString()
        End If
 
    End Sub
 
    Protected Function IndlaesKalenderData() As DataSet
        Dim sourceXML As String = Server.MapPath("/db/kalender.xml")
        If (Not File.Exists(sourceXML)) Then
            Return Nothing
        End If
 
        Dim cachedDataSet As dataSet = Session("KalenderData")
        If (Not cachedDataSet Is Nothing) Then
            Return cachedDataSet
        End If
 
        Dim dataSet As dataSet = New dataSet()
 
        Try
            dataSet.ReadXml(sourceXML)
            Session("KalenderData") = dataSet
        Catch e As Exception
            lblValgtDato.Text = e.Message
            dataSet = Nothing
        End Try
        Return dataSet
    End Function
 
    Private Sub Kalender_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles Kalender.DayRender
        Dim dataSet As dataSet = IndlaesKalenderData()
        If dataSet Is Nothing Then
            Exit Sub
        End If
 
        Dim DagensAftaler As dataSet
        DagensAftaler = HentDagensAftaler(dataSet, e.Day.Date)
 
        ' Vis dagens aftaler, hvis der er nogen
        Dim Aftale As DataRow
        For Each Aftale In DagensAftaler.Tables(0).Rows
            Dim AftaleLabel As New System.Web.UI.WebControls.Label()
            AftaleLabel.Text = "<br />" + Aftale.Item("KortBeskrivelse")
            e.Cell.Controls.Add(AftaleLabel)
        Next
    End Sub
 
    Private Function HentDagensAftaler(ByVal AlleData As DataSet, ByVal DagensDato As DateTime) As DataSet
        ' Hjælper med at finde aftaler for den givne dato
 
        Dim Betingelse As String
        Betingelse = String.Format("Dato = '{0}'", DagensDato.ToString("yyyy/MM/dd"))
        Dim Aftaler() As DataRow = AlleData.Tables(0).Select(Betingelse)
        Dim AlleAftaler As DataSet = AlleData.Clone()
 
        ' build only the rows that match this date...
        Dim Aftale As DataRow
        For Each Aftale In Aftaler
            AlleAftaler.Tables(0).ImportRow(Aftale)
        Next
 
        Return AlleAftaler
    End Function
 
    Private Function FindSikkerDato(ByVal ForeslaaetDato As String) As DateTime
        ' Returnerer en sikker dato
        Dim SikkerDato As DateTime = DateTime.MinValue
        Try
            SikkerDato = DateTime.Parse(ForeslaaetDato)
        Catch e As Exception
            Response.Write("<!-- FEJL i tolkning af dato: " + e.Message + " -->")
        End Try
 
        Return SikkerDato
    End Function
 

    Private Sub Kalender_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Kalender.SelectionChanged
        VisKalenderIndhold()
    End Sub
 
    Private Sub cmdOpretAftale_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpretAftale.Click
        OpretAftalePanel.Visible = True
        cmdOpretAftale.Enabled = False
        If Kalender.SelectedDates.Count = 1 Then
            txtStartDato.Text = Kalender.SelectedDate.ToShortDateString
            txtSlutDato.Text = Kalender.SelectedDate.ToShortDateString
            txtStartTid.Text = "9:00"
            txtSlutTid.Text = "16:00"
        Else
            txtStartDato.Text = Kalender.SelectedDates.Item(0).ToShortDateString
            txtStartTid.Text = "9:00"
            txtSlutDato.Text = Kalender.SelectedDates.Item(Kalender.SelectedDates.Count - 1).ToShortDateString
            txtSlutTid.Text = "16:00"
        End If
    End Sub
 
    Private Sub cmdOpret_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpret.Click
        Dim dataSet As dataSet = IndlaesKalenderData()
        Dim dtStart, dtSlut As DateTime
        Dim i As Integer
        dtStart = FindSikkerDato(txtStartDato.Text)
        dtSlut = FindSikkerDato(txtSlutDato.Text)
        Dim objTable As DataTable
        objTable = dataSet.Tables(0)
        For i = 0 To dtSlut.Subtract(dtStart).Days
            Dim objRow As DataRow
            'Ny rkke
            objRow = objTable.NewRow()
            objRow.Item(0) = txtNavn.Text
            objRow.Item(1) = txtKommentar.Text
            objRow.Item(2) = dtStart.AddDays(i).ToString("yyyy-MM-dd")
            If i = 0 Then
                objRow.Item(3) = txtStartTid.Text
            Else
                objRow.Item(3) = "8:00"
            End If
            If i = dtSlut.Subtract(dtStart).Days Then
                objRow.Item(4) = txtSlutTid.Text
            Else
                objRow.Item(4) = "18:00"
            End If
            objTable.Rows.Add(objRow)
        Next
        dataSet.WriteXml(Server.MapPath("/db/kalender.xml"))
        OpretAftalePanel.Visible = False
        cmdOpretAftale.Enabled = True
        Session("KalenderData") = dataSet
        VisKalenderIndhold()
    End Sub
 
    Private Sub cmdFortryd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFortryd.Click
        OpretAftalePanel.Visible = False
        cmdOpretAftale.Enabled = True
    End Sub

Og datagrundlaget

Et lille xml dokument med denne struktur:

<?xml version="1.0" standalone="yes"?>
<Kalender>
  <Aftale>
    <KortBeskrivelse></KortBeskrivelse>
    <LangBeskrivelse></LangBeskrivelse>
    <Dato></Dato>
    <StartTid></StartTid>
    <SlutTid></SlutTid>
  </Aftale>
</Kalender>

File up og download:

http://www.ondotnet.com/pub/a/dotnet/2002/04/01/asp.html


   
Spacer Spacer Spacer Spacer