Does anybody if something like this exists?
I am trying to write a small program to plan appointments.
And have a overview of them in some sort of calendar(not the mini calendar which you can get from the VB control).

Found some website who offer such controls, but honestly $1k for the license is a bit to much for something which i am not gonna use that often.

So i was wondering if there are any codes available or projects which do something similar.
Or any other solution which could work for this.
Want to save the data in a SQL database.

Thanks

Dani AI

Generated

A compact, practical path from the thread: start with a tiny SQL-backed model and render a simple week grid (one column per day) made from a TableLayoutPanel or seven day Panels. That follows ’s lightweight idea but gives more control for time-slot placement, click-to-add, drag/resize later, and keeps dependencies minimal for a personal tool like described.

Example schema (SQL Server) — keep datetimes in UTC and index the range used for week queries:

CREATE TABLE Appointments (
  AppointmentId INT IDENTITY(1,1) PRIMARY KEY,
  Title NVARCHAR(200) NOT NULL,
  Notes NVARCHAR(MAX) NULL,
  StartUtc DATETIME2 NOT NULL,
  EndUtc DATETIME2 NOT NULL,
  IsAllDay BIT NOT NULL DEFAULT(0),
  CreatedAt DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME()
);
CREATE INDEX IX_Appointments_StartEnd ON Appointments(StartUtc, EndUtc);

VB.NET pattern to load and place events (conceptual): fetch rows that intersect the week, convert UTC→local for display, compute Y/height from minutes-of-day, then create a small Panel control per appointment and add to the day Panel.

' load week
Using cn As New SqlConnection(connString)
  Using cmd As New SqlCommand(
    "SELECT AppointmentId, Title, StartUtc, EndUtc FROM Appointments WHERE StartUtc < @weekEnd AND EndUtc > @weekStart", cn)
    cmd.Parameters.AddWithValue("@weekStart", weekStartUtc)
    cmd.Parameters.AddWithValue("@weekEnd", weekEndUtc)
    Dim dt As New DataTable()
    Using da As New SqlDataAdapter(cmd) : da.Fill(dt) : End Using
    For Each r As DataRow In dt
      Dim sUtc = CType(r("StartUtc"), DateTime)
      Dim eUtc = CType(r("EndUtc"), DateTime)
      Dim sLoc = DateTime.SpecifyKind(sUtc, DateTimeKind.Utc).ToLocalTime()
      Dim eLoc = DateTime.SpecifyKind(eUtc, DateTimeKind.Utc).ToLocalTime()
      ' compute pixel Y/Height from minutes; create Panel, set Top/Height/Tag, add to day panel
    Next
  End Using
End Using

Notes and gotchas: always store UTC; convert for display to handle DST correctly. Query with the "intersecting range" pattern (Start < weekEnd AND End > weekStart). Decide how to show overlaps (stack or compress horizontally). Recurrence adds complexity — store rules separately or expand occurrences on read. Index StartUtc/EndUtc for responsiveness. This gives a small, maintainable scheduler without paid controls and a clear upgrade path to drag/resize or recurring rules later.

Recommended Answers

All 4 Replies

Can you be more specific on the look and feel of the control you are looking for? "Some sort of calendar" is not a lot to go on. If you just want a datebook type program there are several free ones available. Several can be found There is also RedNoteBook available here but it might be a little more than you are looking for featurewise.

Well basically the programs you linked or something along the lines of what i want to make.
But i just want to add a few personal features.
DevExpress got their Calendar/Scheduler component.
But as said the license for that is not cheap.

I want to have a form which covers a week(curentweek), and clicking it it will allow me to add a scheduled appointment by day, time, length.

I don't see that you need a custom control for that. Just seven multiline textboxes labeled with the corresponding date and possibly a calendar control to select a particular week.

hmm that might actually work.
Going to look into that, thanks for the tip.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.