Avatar billede stinejh1980 Nybegynder
11. april 2007 - 16:02 Der er 13 kommentarer og
1 løsning

vise uger i asp.net calendar

Jeg koder i ASP.NET og VB 1.1

Er der nogen der ved om det er muligt at få vist ugenr i en asp calendar control? Det er vigtig for mine brugere da de bliver anvendt i planlægning.

Jeg ved hvordan man anvender ugenr for en pågældende dato, men jeg skal have den vist i selve kalenderen.

Jeg har læst mig frem til at man alternativt kan kode et mouse over java script som fanger kalenderens uge. Er der evt nogen der kender til dette, hvis jeg ikke kan få dem vist i selve kalenderen.

Mvh ElvStine
Avatar billede neoman Novice
11. april 2007 - 17:08 #1
Den kan ikke vise ugenumre :-( .Jeg ved ikke hvordan man kunne lave en JS-ting til at vise ugenumre. Du kunne evt. finde en kalendar-kontrol som kan det du ønsker - der findes nogle ude på nettet, til og med gratis bl.a. på www.hotscripts.com, hvis du har mod på at implementere en importeret kontrol.

Man kan også købe en, f.eks.: http://www.telerik.com/products/aspnet/controls/calendar/overview.aspx
Avatar billede snepnet Nybegynder
11. april 2007 - 17:11 #2
Kan du bruge det her som en byggeklods (bare abbonner på DayRender-eventet):

protected void someCal_DayRender(object sender, DayRenderEventArgs e)
{
    Label l = new Label();
    l.Text = GetWeekNumber(e.Day.Date).ToString();
    l.Font.Size = 5;
    e.Cell.Controls.AddAt(0, l);
}

private int GetWeekNumber(DateTime date)
{
  // din implementering
}

Ovenstående er hurtigt fikset, men viser ugenummeret i alle cellerne.

Men ellers - som neoman skriver - så kunne du måske købe en, hvis det er arbejdsrelateret (der er en hel del at vælge imellem).

Mvh
Avatar billede neoman Novice
11. april 2007 - 17:29 #3
snepnet har da en idé der vist. Jeg har tyvstjålet en algoritme her fra (mener det var arne_v) som kom med den :

        public static int WeekNumber(int year, int mon, int day)
        {
            int a = (14 - mon) / 12;
            int y = year + 4800 - a;
            int m = mon + 12*a - 3;
            int JD = day + (153 * m + 2)/5 + 365*y + y/4 - y/100 + y/400 - 32045;
            int d4 = (((JD + 31741 - JD % 7) % 146097) % 36524) % 1461;
            int L = d4 / 1460;
            int d1 = ((d4 - L) % 365) + L;
            return d1 / 7 + 1;
        }

Der findes også en metode at få fat i ugenummer fra en dato i .net itself : det er noget forfærdeligt noget, så arne's algoritme er noget simplere at gå til.
Avatar billede neoman Novice
11. april 2007 - 17:43 #4
...og hvis vi tænker videre over snepnet's idé så kunne du evt. også sætte uge-nummeret ind i tool tip for cellen i stedet for - det er jo næsten samme løsning som du havde tænkt med JS, og uendeligt meget nemmere at implementere.
Avatar billede snepnet Nybegynder
11. april 2007 - 20:44 #5
Der ligger også en her - har ikke selv forholdt mig synderligt til det, og har ikke prøvet at finde ud af om de to modeller giver samme resultat.
http://konsulent.sandelien.no/VB_help/Week/
Mvh
Avatar billede stinejh1980 Nybegynder
12. april 2007 - 08:14 #6
Jeg har kigget på de der telerik, og vi ender nok med at købe et par controls.

Jeg satesede bare på at jeg ikke have fundet det rigtige sted med hensyn til at vise uge nr, men det var noget i stil med tool tippet jeg ledte efter.

Det er nemlig vigtigt for brugere at se hvilken uge deres deadline ligger i. Men jeg kan ikke finde ad af tooltippet for en asp.net calendar.

Jeg kigger lige på det i har vist og vender tilbage.
Avatar billede stinejh1980 Nybegynder
12. april 2007 - 08:27 #7
PS.

Det lyder måske lidt dumt dette her men....

Efter som jeg er indoktrineret med ASP.NET og VB 1.1 så er jeg ked af at sige at jeg ikke kan genkende jeres kode?
Er det java eller C#??

Sorry :-)
Avatar billede snepnet Nybegynder
12. april 2007 - 08:53 #8
Det er C# - du kan oversætte her:
http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx

Peter Blums varer er heller ikke uden evner:
http://peterblum.com/DateControls/Home.aspx
Og hans priser er meget rimelige:
http://peterblum.com/DateControls/Commercial.aspx
Teleriks kontroller er også fremragende, og med fornem dokumentation.

Du kan sætte tooltip på cellen sådan her (med udgangspunkt i det første kodeeksempel jeg sendte).
e.Cell.ToolTip = GetWeekNumber(e.Day.Date).ToString();

Men kalenderen giver pr. default tooltips på selve teksten der viser datoen, så det skal nok slås fra, hvis det skal være anvendeligt.

Mvh
Avatar billede stinejh1980 Nybegynder
12. april 2007 - 09:44 #9
Snepnet, smid et svar.

Jeg lavede en kombi af deit svar fra 11/04-2007 17:11:18 og http://konsulent.sandelien.no/VB_help/Week/

Og hvis andre som mig ikke har styr på C# kan jeg anbefale:
http://authors.aspalliance.com/aldotnet/examples/translate.aspx
(Virker bedst i Internet explorer...Grrrr)

Her er mit resultat - hvis andre kunne have gavn af det:
Private Sub Calendar1_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles Calendar1.DayRender
        e.Cell.ToolTip = "Week: " & WeekNumber_Entire4DayWeekRule(e.Day.Date).ToString()
    End Sub


    Private Function WeekNumber_Entire4DayWeekRule(ByVal [date] As DateTime) As Integer
        ' In this scenario the first day of the week is monday,
        ' and the week rule states that:
        ' [...] the first calendar week of a year is the one
        ' that includes the first Thursday of that year and
        ' [...] the last calendar week of a calendar year is
        ' the week immediately preceding the first
        ' calendar week of the next year.
        ' The first week of the year may thus start in the
        ' preceding year
        Const JAN As Integer = 1
        Const DEC As Integer = 12
        Const LASTDAYOFDEC As Integer = 31
        Const FIRSTDAYOFJAN As Integer = 1
        Const THURSDAY As Integer = 4
        Dim ThursdayFlag As Boolean = False

        ' Get the day number since the beginning of the year
        Dim DayOfYear As Integer = [date].DayOfYear

        ' Get the numeric weekday of the first day of the
        ' year (using sunday as FirstDay)
        Dim StartWeekDayOfYear As Integer = CInt(New DateTime([date].Year, JAN, FIRSTDAYOFJAN).DayOfWeek)
        Dim EndWeekDayOfYear As Integer = CInt(New DateTime([date].Year, DEC, LASTDAYOFDEC).DayOfWeek)

        ' Compensate for the fact that we are using monday
        ' as the first day of the week
        If StartWeekDayOfYear = 0 Then
            StartWeekDayOfYear = 7
        End If
        If EndWeekDayOfYear = 0 Then
            EndWeekDayOfYear = 7
        End If
        ' Calculate the number of days in the first and last week
        Dim DaysInFirstWeek As Integer = 8 - StartWeekDayOfYear
        Dim DaysInLastWeek As Integer = 8 - EndWeekDayOfYear

        ' If the year either starts or ends on a thursday it will have a 53rd week
        If StartWeekDayOfYear = THURSDAY Or EndWeekDayOfYear = THURSDAY Then
            ThursdayFlag = True
        End If
        ' We begin by calculating the number of FULL weeks between the start of the year and
        ' our date. The number is rounded up, so the smallest possible value is 0.
        Dim FullWeeks As Integer = CInt(Math.Ceiling(((DayOfYear - DaysInFirstWeek) / 7.0)))

        Dim WeekNumber As Integer = FullWeeks

        ' If the first week of the year has at least four days, then the actual week number for our date
        ' can be incremented by one.
        If DaysInFirstWeek >= THURSDAY Then
            WeekNumber = WeekNumber + 1
        End If
        ' If week number is larger than week 52 (and the year doesn't either start or end on a thursday)
        ' then the correct week number is 1.
        If WeekNumber > 52 And Not ThursdayFlag Then
            WeekNumber = 1
        End If
        ' If week number is still 0, it means that we are trying to evaluate the week number for a
        ' week that belongs in the previous year (since that week has 3 days or less in our date's year).
        ' We therefore make a recursive call using the last day of the previous year.
        If WeekNumber = 0 Then
            WeekNumber = WeekNumber_Entire4DayWeekRule(New DateTime([date].Year - 1, DEC, LASTDAYOFDEC))
        End If
        Return WeekNumber
    End Function 'WeekNumber_Entire4DayWeekRule
Avatar billede stinejh1980 Nybegynder
12. april 2007 - 09:46 #10
Jeg fik vist svaret før siden havde reloaded :-)
Avatar billede snepnet Nybegynder
12. april 2007 - 09:51 #11
Et svar får du her :o)
- og jeg delers self. gerne med neoman.
Mvh
Avatar billede neoman Novice
12. april 2007 - 10:41 #12
Jeg afstår, bidragenes relative betydning taget i betragtning;-)
Avatar billede neoman Novice
12. april 2007 - 10:51 #13
A propos http://konsulent.sandelien.no/VB_help/Week/ - jeg kører en week number beregning vha .NETs 2.0 indbyggede faciliteter, og får faktisk det rigtige resultat, altså det at sidste uge i 2003 har nummer 1, med CultureInfo("da-DK") - så det kan være MS har oppet sig i .NEt 2.0
Avatar billede neoman Novice
12. april 2007 - 10:53 #14
Dim myCI As New CultureInfo("da-DK")
        Dim myCal As System.Globalization.Calendar = myCI.Calendar

        ' Gets the DTFI properties required by GetWeekOfYear.
        Dim myCWR As CalendarWeekRule = myCI.DateTimeFormat.CalendarWeekRule
        Dim myFirstDOW As DayOfWeek = myCI.DateTimeFormat.FirstDayOfWeek

        ' Displays the total number of weeks in the current year.
        Dim LastDay = New System.DateTime(DateTime.Now.Year, 12, 31)
      '  Console.WriteLine("There are {0} weeks in the current year ({1}).", MyWeekNumber = myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year)
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