Tuesday, August 14, 2012

Calender Extender [AjaxToolkit] enable month selection and apply rules b/w tow cal extenders

 
 
<asp:Content ID="Content3" ContentPlaceHolderID="ContentContent" runat="server">
 
        <script type="text/javascript">
 
 
            var cal1;
            var cal2;
 
 
            function pageLoad() {
                cal1 = $find("calendar1");
                cal2 = $find("calendar2");
 
                    //modify cal ext delegate to support month selection and stop further date selection
                modifyCalDelegates(cal1);
                //modifyCalDelegates(cal2);
            }
 
 
            function modifyCalDelegates(cal) {
                //we need to modify the original delegate of the month cell.
                cal._cell$delegates = {
                    mouseover: Function.createDelegate(cal, cal._cell_onmouseover),
                    mouseout: Function.createDelegate(cal, cal._cell_onmouseout),
 
 
                    click: Function.createDelegate(cal, function(e) {
                        /// <summary>
                        /// Handles the click event of a cell
                        /// </summary>
                        /// <param name="e" type="Sys.UI.DomEvent">The arguments for the event</param>
 
 
                        e.stopPropagation();
                        e.preventDefault();
 
 
                        if (!cal._enabled) return;
 
 
                        var target = e.target;
                        var visibleDate = cal._getEffectiveVisibleDate();
                        Sys.UI.DomElement.removeCssClass(target.parentNode, "ajax__calendar_hover");
                        switch (target.mode) {
                            case "prev":
                            case "next":
                                cal._switchMonth(target.date);
                                break;
                            case "title":
                                switch (cal._mode) {
                                    case "days": cal._switchMode("months"); break;
                                    case "months": cal._switchMode("years"); break;
                                }
                                break;
                            case "month":
                                //if the mode is month, then stop switching to day mode.
                                if (target.month == visibleDate.getMonth()) {
                                    //this._switchMode("days");
                                } else {
                                    cal._visibleDate = target.date;
                                    //this._switchMode("days");
                                }
                                cal.set_selectedDate(target.date);
                                cal._switchMonth(target.date);
                                cal._blur.post(true);
                                cal.raiseDateSelectionChanged();
                                break;
                            case "year":
                                if (target.date.getFullYear() == visibleDate.getFullYear()) {
                                    cal._switchMode("months");
                                } else {
                                    cal._visibleDate = target.date;
                                    cal._switchMode("months");
                                }
                                break;
 
 
                            //                case "day":
                            //                    this.set_selectedDate(target.date);
                            //                    this._switchMonth(target.date);
                            //                    this._blur.post(true);
                            //                    this.raiseDateSelectionChanged();
                            //                    break;
                            case "today":
                                cal.set_selectedDate(target.date);
                                cal._switchMonth(target.date);
                                cal._blur.post(true);
                                cal.raiseDateSelectionChanged();
                                break;
                        }
 
 
                    })
                }
 
 
            }
 
 
            function onCalendarShown(sender, args) {
                //set the default mode to month
                sender._switchMode("months", true);
                changeCellHandlers(cal1);
            }
 
 
 
 
            function changeCellHandlers(cal) {
 
 
                if (cal._monthsBody) {
 
 
                    //remove the old handler of each month body.
                    for (var i = 0; i < cal._monthsBody.rows.length; i++) {
                        var row = cal._monthsBody.rows[i];
                        for (var j = 0; j < row.cells.length; j++) {
                            $common.removeHandlers(row.cells[j].firstChild, cal._cell$delegates);
                        }
                    }
                    //add the new handler of each month body.
                    for (var i = 0; i < cal._monthsBody.rows.length; i++) {
                        var row = cal._monthsBody.rows[i];
                        for (var j = 0; j < row.cells.length; j++) {
                            $addHandlers(row.cells[j].firstChild, cal._cell$delegates);
                        }
                    }
 
 
                }
            }
 
 
            function onCalendarHidden(sender, args) {
 
 
                if (sender.get_selectedDate()) {
                    if (cal1.get_selectedDate() && cal2.get_selectedDate() && cal1.get_selectedDate() > cal2.get_selectedDate()) {
                        alert('The "From" Date should smaller than the "To" Date, please reselect!');
                        sender.show();
                        return;
                    }
                    //get the final date
                    var finalDate = new Date(sender.get_selectedDate());
                    var selectedMonth = finalDate.getMonth();
                    finalDate.setDate(1);
                    if (sender == cal1) {
                        // set the calender2's default date 10th day of the next month as per calender1
                        finalDate.setMonth(selectedMonth + 1);
                        finalDate.setDate(finalDate.getDate() + 9);
                        finalDate = new Date(finalDate);
                    }
                    //set the date to the TextBox
                    cal2.get_element().value = finalDate.format(cal2._format);
                }
            }
 
 
        </script>
 
 
        <div>
            TP :
            <asp:TextBox ID="TextBox1" runat="server" AutoCompleteType="Disabled"></asp:TextBox>
            <ajaxToolkit:CalendarExtender ID="CalendarExtender1" BehaviorID="calendar1" runat="server"
                Enabled="True" Format="yyyyMM" TargetControlID="TextBox1" OnClientShown="onCalendarShown"
                OnClientHidden="onCalendarHidden">
            </ajaxToolkit:CalendarExtender>
            SD :
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <ajaxToolkit:CalendarExtender ID="CalendarExtender2" BehaviorID="calendar2" runat="server"
                Enabled="True" Format="yyyy/MM/dd" TargetControlID="TextBox2" >
            </ajaxToolkit:CalendarExtender>
        </div>
</asp:Content>
 

Friday, June 29, 2012

WCF Service dead end exception

{System.Collections.EmptyReadOnlyDictionaryInternal}
 
System.ExecutionEngineException was unhandled
  Message="Exception of type 'System.ExecutionEngineException' was thrown."
  InnerException:
 
 

Friday, May 11, 2012

Methods to execute/run SSIS packages

Running SSIS on remote server is supposed to be a trick one for which option are given below with details
 
 
Running SSIS package on a remote machine à http://msdn.microsoft.com/en-us/library/ms403355.aspx
 

Tuesday, February 14, 2012

Javascript validate date time [safest way]

<script type="text/javascript" language="javascript">
 
        function isLeapYear() {
            return (year % 4 != 0 ? false :
                ( year % 100 != 0? true:
                ( year % 1000 != 0? false : true)));
        }
 
        function isValidDate(date_string) {
            var days = [0,31,28,31,30,31,30,31,31,30,31,30,31];
            var year, month, day, date_parts = null;
            var rtrn = false;
            var format = 'mm/dd/yyyy';
            var decisionTree = {
                'm/d/y':{
                    're':/^(\d{1,2})[./-](\d{1,2})[./-](\d{2}|\d{4})$/,
                    'month': 1,'day': 2, year: 3
                },
                'mm/dd/yy':{
                    're':/^(\d{1,2})[./-](\d{1,2})[./-](\d{2})$/,
                    'month': 1,'day': 2, year: 3
                },
                'mm/dd/yyyy':{
                    're':/^(\d{1,2})[./-](\d{1,2})[./-](\d{4})$/,
                    'month': 1,'day': 2, year: 3
                },
                'y/m/d':{
                    're':/^(\d{2}|\d{4})[./-](\d{1,2})[./-](\d{1,2})$/,
                    'month': 2,'day': 3, year: 1
                },
                'yy/mm/dd':{
                    're':/^(\d{1,2})[./-](\d{1,2})[./-](\d{1,2})$/,
                    'month': 2,'day': 3, year: 1
                },
                'yyyy/mm/dd':{
                    're':/^(\d{4})[./-](\d{1,2})[./-](\d{1,2})$/,
                    'month': 2,'day': 3, year: 1
                }
            };
            var test = decisionTree[format];
            if (test) {
                date_parts = date_string.match(test.re);
                if (date_parts) {
                    year = date_parts[test.year] * 1;
                    month = date_parts[test.month] * 1;
                    day = date_parts[test.day] * 1;
 
                    test = (month == 2 &&
                            isLeapYear() &&
                            29 ||
                            days[month] || 0);
 
                    rtrn = 1 <= day && day <= test;
                }
            }
            return rtrn;
        }
    </script>
 
 

Javascript Popup with dataentry

HTML Markup :
 
<asp:Button ID="btnCOBDC" runat="server" Text="COBD Close" OnClick="COBD_Click" OnClientClick="return show_COBDprompt();" />
<asp:HiddenField ID="hdnCOBDValue" runat="server" />
<asp:HiddenField ID="hdnExpectedCOBD" runat="server" />
 
 
Javascript to Handle prompt and input value [limitation : only one input value] [for multiple value input use div]
 
<script type="text/javascript" language="javascript">
 
        function isLeapYear() {
            return (year % 4 != 0 ? false :
                ( year % 100 != 0? true:
                ( year % 1000 != 0? false : true)));
        }
 
        function isValidDate(date_string) {
            var days = [0,31,28,31,30,31,30,31,31,30,31,30,31];
            var year, month, day, date_parts = null;
            var rtrn = false;
            var format = 'mm/dd/yyyy';
            var decisionTree = {
                'm/d/y':{
                    're':/^(\d{1,2})[./-](\d{1,2})[./-](\d{2}|\d{4})$/,
                    'month': 1,'day': 2, year: 3
                },
                'mm/dd/yy':{
                    're':/^(\d{1,2})[./-](\d{1,2})[./-](\d{2})$/,
                    'month': 1,'day': 2, year: 3
                },
                'mm/dd/yyyy':{
                    're':/^(\d{1,2})[./-](\d{1,2})[./-](\d{4})$/,
                    'month': 1,'day': 2, year: 3
                },
                'y/m/d':{
                    're':/^(\d{2}|\d{4})[./-](\d{1,2})[./-](\d{1,2})$/,
                    'month': 2,'day': 3, year: 1
                },
                'yy/mm/dd':{
                    're':/^(\d{1,2})[./-](\d{1,2})[./-](\d{1,2})$/,
                    'month': 2,'day': 3, year: 1
                },
                'yyyy/mm/dd':{
                    're':/^(\d{4})[./-](\d{1,2})[./-](\d{1,2})$/,
                    'month': 2,'day': 3, year: 1
                }
            };
            var test = decisionTree[format];
            if (test) {
                date_parts = date_string.match(test.re);
                if (date_parts) {
                    year = date_parts[test.year] * 1;
                    month = date_parts[test.month] * 1;
                    day = date_parts[test.day] * 1;
 
                    test = (month == 2 &&
                            isLeapYear() &&
                            29 ||
                            days[month] || 0);
 
                    rtrn = 1 <= day && day <= test;
                }
            }
            return rtrn;
        }
 
        function show_COBDprompt() {
            var expectedCOBD = document.getElementById('hdnExpectedCOBD').value;
            var cobd = prompt("Please enter COB Date [mm/dd/yyyy] :", expectedCOBD);
            if (cobd != null && cobd != "") {
                if(!isValidDate(cobd)){ alert('Please enter the date in correct format i.e. mm/dd/yyyy'); return false; }
                document.getElementById('hdnCOBDValue').value = cobd;
                return true;
            }
            return false;
        }
    </script>
 

Thursday, February 9, 2012

Microsoft Chart Tool 3.5 guide

To display a chart similar to the one below
 
 
Three easy steps to do the chart:
  1. Create a DataTable with columns equal to number of bars needed for each week and a column for week itself. Populate table data.
  2. Create a chart with series based on the datatable columns as below
for (int i = 1; i < chartData.Columns.Count; i++)
        {
            if (isFirstColumn)
            {
                Chart1.Series[0].XValueMember = chartData.Columns[0].ToString();
                Chart1.Series[0].YValueMembers = chartData.Columns[i].ToString();
                isFirstColumn = false;
            }
            else
            {
                Chart1.Series.Add(Convert.ToString(i));
                Chart1.Series[Convert.ToString(i)].XValueMember = chartData.Columns[0].ToString();
                Chart1.Series[Convert.ToString(i)].YValueMembers = chartData.Columns[i].ToString();
            }
        }
  1. Your are done, just bind the chart with the datatable
 
 
 

LINQ -- how to pivot data usefull for charting

Extend Dictionary for var to have access to the extention function
 
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ReflectionIT.Training {
 
    public static class LinqExtenions {
 
        public static Dictionary<TFirstKey, Dictionary<TSecondKey, TValue>> Pivot<TSource, TFirstKey, TSecondKey, TValue>(this IEnumerable<TSource> source, Func<TSource, TFirstKey> firstKeySelector, Func<TSource, TSecondKey> secondKeySelector, Func<IEnumerable<TSource>, TValue> aggregate) {
            var retVal = new Dictionary<TFirstKey, Dictionary<TSecondKey, TValue>>();
 
            var l = source.ToLookup(firstKeySelector);
            foreach (var item in l) {
                var dict = new Dictionary<TSecondKey, TValue>();
                retVal.Add(item.Key, dict);
                var subdict = item.ToLookup(secondKeySelector);
                foreach (var subitem in subdict) {
                    dict.Add(subitem.Key, aggregate(subitem));
                }
            }
 
            return retVal;
        }
 
    }
}
 
Use any var typed variable [L in this case] with your resultset
 
var result1 = L.Pivot(emp => emp.Department, emp2 => emp2.Function, lst => lst.Sum(emp => emp.Salary));
 
        foreach (var row in result1) {
            Console.WriteLine(row.Key);
            foreach (var column in row.Value) {
                Console.WriteLine("  " + column.Key + "\t" + column.Value);
 
            }
        }
 
        Console.WriteLine("----");
 
        var result2 = l.Pivot(emp => emp.Function, emp2 => emp2.Department, lst => lst.Count());
 
        foreach (var row in result2) {
            Console.WriteLine(row.Key);
            foreach (var column in row.Value) {
                Console.WriteLine("  " + column.Key + "\t" + column.Value);
 
            }
        }