Maintaining source code received upon purchasing a DlhSoft Plus license

When you purchase a Business Plus (or a Personal Plus) license for a DlhSoft framework you will receive the source code of the library as a zip file. Extract it to a folder, and you’re free to modify it before using the output in your own project, it’s that easy.

But what if you’d ever want to update the source code to a newest version? (Such as for free during the first year since the purchase, or by purchasing a renewal license later.)

This simple strategy can help you; it uses git, but you can use other source code control tools as well (just adapt the commands appropriately):

  1. Commit the original DlhSoft source code into a private local repo on your side, initialized in the folder where you extracted the zip.
    • Important: Do not expose the repo to any other third parties!
  2. Create and checkout a dev branch, customize the source code as needed, commit the changes, and reuse output in your own project(s).
  3. When you get an updated zip for the DlhSoft product source code, checkout the master branch and replace the files in there. Git should detect the changes and you can commit them as well (to record the differences) on the original branch.
  4. Merge master branch into dev (having the latter checked out again) to combine DlhSoft changes with your own and eventually be able to reuse the updated customized output in your project(s).
    • Repeat steps 3-4 later if they would become applicable again.
[received initial]
mkdir dlhsoft-source-code
cd dlhsoft-source-code
git init
git add .
git commit -m "v1"
git branch dev
git checkout dev
[update source code files]
git commit -m "Customizations"
[build source code and reuse customized output]
git checkout master
[extract over local files]
git add .
git commit -m "v2"
git checkout dev
git merge master
[build source code and reuse updated customized output]
Posted in Development Components | Tagged , , , , , , | Leave a comment

Our December offer: 20% off

Hey everyone. We have a special offer for you guys this winter: 20% discount for all product licenses ordered until Dec. 31! Just order until that date and the discount would be automatically applied upon requesting.

[Teaser] PS: We are still working on the last steps on a new thingy (i.e. product) to be released soon. Keep in touch! 🙂

Posted in Promotions | Tagged | Leave a comment

Visual Basic samples for Gantt Chart Light Library (WPF components)

An update for the previous post: we’ve recently converted (and adapted) all C# sample apps that we have for Gantt Chart Light Library to Visual Basic as well.

We encourage you to check their source code in our public git repo, and/or to see them in action on your own PC, by simply running our ClickOnce-deployed Demos app and selecting WPF-Visual Basic from the top-right technology selector.

(We know that many developers use Visual Basic, and we think it’s absolutely fine! Although the components themselves have been written in C#, we acknowledge that Visual Basic is a first class .NET language too, and there should be nothing from our side to stop you using it. Like any WPF component, our controls can be instantiated and accessed using any language that is supported by the .NET Framework itself.)

Posted in Development Components | Tagged , , , , , , | Leave a comment

Gantt Chart Light Library samples

Do you want to access the source code of all the sample apps that we’ve prepared for Gantt Chart Light Library? (We’ve recently added a few more, including some requested directly by you, the customers.)

It’s easy: get them from our GitHub repo! This link, for example, is pointing directly to the list of GanttChartDataGrid samples for WPF. Enjoy!

Posted in Development Components | Tagged , , , | 1 Comment

FAQ: Handling mouse events in our ASP .NET WebForms based Gantt Charts

Let’s assume you have a ScheduleChartView (or a more simple GanttChartView, of course) defined on server side in your ASP .NET WebForms app, and you’d want to handle mouse click events on the Gantt Chart bars that are displayed in the browser.

While the server side component does have selection and item change events running upon the next callback, for mouse click event handling you’d need to rely on client side, though (for obvious reasons: you just won’t want to post back to the server causing a refresh just to handle a click.)

But don’t worry, our server side components have client side counterparts which you can use instead – components from our JavaScript based Gantt Chart Hyper Library (also available separately, by the way.)

When an item’s bar is clicked – and actually whenever any mouse event occurs in any of the component’s areas – you can determine the details of the action, including which bar was at the mouse position, on which row was it placed, and at what date and time in the timeline the click occurred in the chart area.

The binding between the two sides (server-client) can be realized by setting the InitializedClientSideCode property of the ASP .NET component, using JavaScript statements as string, such as initializing a mouseHandler function for the internal control.

The sample below is for ScheduleChatView (but it can be easily adapted to work with GanttChartView too). Note just that you’d need to replace the console.log calls with your own code, handling the different situations depending on the received arguments:

ScheduleChartView.InitializedClientCode = @"
control.settings.mouseHandler = function (eventName, isOnItemsArea, isOnChart, row, column, button, clickCount, e) {
    var rowDetails = isOnItemsArea ? 'Item: ' + (row ? row.content : 'none') : (row ? 'Scale: ' + row.scaleType : 'Grid header');
    var ganttChartItemDetails = getGanttChartItemDetailsAt(row, column);
    var columnDetails = isOnChart ? 'Date: ' + column.toDateString() : 'Column: ' + column.header;
    var buttonDetails = button == 1 ? 'left' : (button == 2 ? 'middle' : (button == 3 ? 'right' : 'N/A'));
    if (clickCount > 0) {
            'Event: ' + eventName + ' - ' +
            'Is on items area: ' + isOnItemsArea + ' - ' +
            'Is on chart: ' + isOnChart + ' - ' +
            rowDetails + ' - ' + columnDetails +' - ' +
            'Button: ' + buttonDetails + ' - ' +
            'Click count: ' + clickCount + (ganttChartItemDetails ? ';' : '.'));
        if (ganttChartItemDetails) {
                '\n - Gantt Chart items: ' + ganttChartItemDetails + '.');
function getGanttChartItemDetailsAt(scheduleChartItem, dateTime) {
    var ganttChartItems = scheduleChartItem.ganttChartItems;
    if (!ganttChartItems)
        return null;
    var details = '';
    for (var i = 0; i < ganttChartItems.length; i++) {
        var item = ganttChartItems[i];
        if (item.start > dateTime || item.finish < dateTime)
        if (details.length > 0)
            details += ', ';
        details += item.content ? item.content : '?';
    return details;


Posted in Development Components | Tagged , , , , , | Leave a comment

FAQ: Weeks starting on Monday (or Saturday) in our WPF Gantt Charts

With GanttChartDataGrid, ScheduleChartDataGrid and other timeline-based components from DlhSoft Gantt Chart Light Library you, as a developer, can easily configure custom working (and therefore also nonworking) time, including by setting the limits of the week, e.g. WorkingWeekStart = Monday, and WorkingWeekFinish = Saturday, for example (besides also being able to set up WorkingDayStart/Finish time of days, and any specific nonworking intervals such as holidays or breaks).

Still, the component will also present (and gray out) the remaining nonworking days if you just let the default values for VisibleWeekStart/Finish properties (Sunday-Saturday).

Here we need to provide an important heads-up, though: you cannot control with those general settings what is the actual day for week starting, i.e. where the UI should to display vertical week separators simply because not always you would need to display weeks in the component, although working time can always be based on weeks.

Instead, if you want to have vertical separator lines between Sundays and Mondays (or between Fridays and Saturdays) rather than between Saturdays and Sundays, you will need to use another ScaleType value – “WeeksStartingMonday” on the Scale item that was previously set to type “Weeks” in the Scales collection of the component (or “WeeksStartingSaturday” if that’s more appropriate for your application users.)

Posted in Development Components | Tagged , , , , , , , , | Leave a comment