Thursday, November 26, 2009

Download multiple files as a zip folder in asp.net

The following post is for downloading multiple files as a zip folder in asp.net,
In .aspx :

<div>
    <asp:GridView ID="gvFiles" runat="server" AutoGenerateColumns="false">
  
    <Columns>
  
    <asp:TemplateField>
    <ItemTemplate>
    <asp:CheckBox ID="chkSelect" runat="server" />
    </ItemTemplate>
    </asp:TemplateField>
              
    <asp:TemplateField HeaderText="File Name">
      
  
    <ItemTemplate>
    <asp:Label ID="lblFileName" runat="server" Text='<%# Eval("FileName") %>' />
    <asp:Label ID="lblFilePath" Visible="false" runat="server" Text='<%# Eval("FilePath") %>' />
    </ItemTemplate>
    </asp:TemplateField>
  
    </Columns>
  
    </asp:GridView>
  
    <br />
    <asp:Button ID="btn_DownloadAll" runat="server" Text="Download" OnClick="Btn_Download_All_Click" />
  
    <asp:Label ID="lblMessage" runat="server" Font-Size="16" BackColor="Red" />

    </div>

In .aspx.cs:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;


public partial class MultipleFiledownload : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindData();
        }
    }
    private void BindData()
    {
        var files = Directory.GetFiles(Server.MapPath("~/Files"));


        gvFiles.DataSource = from f in files
                             select new
                                        {
                                            FileName = Path.GetFileName(f),
                                            FilePath = f
                                        };
        gvFiles.DataBind();
    }


    protected void Btn_Download_All_Click(object sender, EventArgs e)
    {
        // download all the files 
        ZipAllFiles();


    }


    private void ZipAllFiles()
    {
        byte[] buffer = new byte[4096];


        // the path on the server where the temp file will be created!
        var tempFileName = Server.MapPath(@"TempFiles/" + Guid.NewGuid().ToString() + ".zip");


        var zipOutputStream = new ZipOutputStream(File.Create(tempFileName));
        var filePath = String.Empty;
        var fileName = String.Empty;
        var readBytes = 0;


        foreach (GridViewRow row in gvFiles.Rows)
        {
            var isChecked = (row.FindControl("chkSelect") as CheckBox).Checked;
            if (!isChecked) continue;


            filePath = (row.FindControl("lblFilePath") as Label).Text;
            fileName = (row.FindControl("lblFileName") as Label).Text;


            var zipEntry = new ZipEntry(fileName);


            zipOutputStream.PutNextEntry(zipEntry);


            using (var fs = File.OpenRead(filePath))
            {
                do
                {
                    readBytes = fs.Read(buffer, 0, buffer.Length);
                    zipOutputStream.Write(buffer, 0, readBytes);


                } while (readBytes > 0);
            }
        }


        if (zipOutputStream.Length == 0)
        {
            lblMessage.Text = "Please select at least one file!";
            return;
        }




        zipOutputStream.Finish();
        zipOutputStream.Close();


        Response.ContentType = "application/x-zip-compressed";
        Response.AppendHeader("Content-Disposition", "attachment; filename=YourFile.zip");
        Response.WriteFile(tempFileName);


        Response.Flush();
        Response.Close();


        // delete the temp file 
        if (File.Exists(tempFileName))
            File.Delete(tempFileName);
    }
}





Upload a csv file and show data in a grid view

The following post will lead u to Upload a csv file and show data in a grid view,
In .aspx page:

<table>
 <tr>
  <td>
   <asp:FileUpload ID="FileUpload1" runat="server" />
  </td>
  <td>
   <asp:Button ID="Button1" runat="server" OnClientClick="return noFilePresent();" OnClick="Button1_Click" Text="Upload CSV" />
  </td>
 </tr>
 <tr>
   <td colspan="2">
    <asp:Label ID="lblMsg" Text="Please Select Proper File" runat="server" BorderColor="White"
         Font-Bold="True" ForeColor="Red" Visible="false"></asp:Label>
   </td>
 </tr>
 <tr>
   <td>
    <asp:GridView ID="gv" runat="server"></asp:GridView>
   </td>
 </tr>
</table>


In .aspx.cs :

protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
      
            //save the file
            //restrict user to upload other file extenstion
            string[] FileExt = FileUpload1.FileName.Split('.');
            string FileEx = FileExt[FileExt.Length - 1];
            if (FileEx.ToLower() == "csv")
            {
                FileUpload1.SaveAs(Server.MapPath("CSVLoad//" + FileUpload1.FileName));
            }
            else
            {
                Response.Write("Upload a valid file");
                return;
            }
      

        //create object for CSVReader and pass the stream
        CSVReader reader = new CSVReader(FileUpload1.PostedFile.InputStream);
        //get the header
        string[] headers = reader.GetCSVLine();
        DataTable dt = new DataTable();
        //add headers
        foreach (string strHeader in headers)
            dt.Columns.Add(strHeader);

        string[] data;
      
        while ((data = reader.GetCSVLine()) != null)
            dt.Rows.Add(data);
        //bind gridview
        gv.DataSource = dt;
        gv.DataBind();

    }

CSVReader.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
using System.Collections;
/// <summary>
/// Summary description for CSVReader
/// </summary>
namespace Csv.Reader
{
    public class CSVReader
    {

        //

        private Stream objStream;

        private StreamReader objReader;


        //add name space System.IO.Stream

        public CSVReader(Stream filestream) : this(filestream, null) { }



        public CSVReader(Stream filestream, Encoding enc)
        {

            this.objStream = filestream;

            //check the Pass Stream whether it is readable or not

            if (!filestream.CanRead)
            {

                return;

            }
            objReader = (enc != null) ? new StreamReader(filestream, enc) : new StreamReader(filestream);
        }
        //parse the Line
        public string[] GetCSVLine()
        {
            string data = objReader.ReadLine();
            if (data == null) return null;
            if (data.Length == 0) return new string[0];
            //System.Collection.Generic
            ArrayList result = new ArrayList();
            //parsing CSV Data
            ParseCSVData(result, data);
            return (string[])result.ToArray(typeof(string));
        }

        private void ParseCSVData(ArrayList result, string data)
        {
            int position = -1;
            while (position < data.Length)
                result.Add(ParseCSVField(ref data, ref position));
        }

        private string
            ParseCSVField(ref string data, ref int StartSeperatorPos)
        {
            if (StartSeperatorPos == data.Length - 1)
            {
                StartSeperatorPos++;
                return "";
            }

            int fromPos = StartSeperatorPos + 1;
            if (data[fromPos] == '"')
            {
                int nextSingleQuote = GetSingleQuote(data, fromPos + 1);
                int lines = 1;
                while (nextSingleQuote == -1)
                {
                    data = data + "\n" + objReader.ReadLine();
                    nextSingleQuote = GetSingleQuote(data, fromPos + 1);
                    lines++;
                    if (lines > 20)
                        throw new Exception("lines overflow: " + data);
                }
                StartSeperatorPos = nextSingleQuote + 1;
                string tempString = data.Substring(fromPos + 1, nextSingleQuote - fromPos - 1);
                tempString = tempString.Replace("'", "''");
                return tempString.Replace("\"\"", "\"");
            }

            int nextComma = data.IndexOf(',', fromPos);
            if (nextComma == -1)
            {
                StartSeperatorPos = data.Length;
                return data.Substring(fromPos);
            }
            else
            {
                StartSeperatorPos = nextComma;
                return data.Substring(fromPos, nextComma - fromPos);
            }
        }

        private int GetSingleQuote(string data, int SFrom)
        {
            int i = SFrom - 1;
            while (++i < data.Length)
                if (data[i] == '"')
                {
                    if (i < data.Length - 1 && data[i + 1] == '"')
                    {
                        i++;
                        continue;
                    }
                    else
                        return i;
                }
            return -1;
        }
    }
}

Output:












Wednesday, November 25, 2009

Javascript Date Picker

The following javascript is a date picker,

In html page:
<input type="text" onclick="displayDatePicker('enquiryDate');"  id="enquiryDate"  />

DatePicker.js:

/*   -----------Date picker start-----------  */

var datePickerDivID = "datepicker";
var iFrameDivID = "datepickeriframe";
var dayArrayShort = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
var dayArrayMed = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var dayArrayLong = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var monthArrayShort = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var monthArrayMed = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
var monthArrayLong = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var defaultDateSeparator = "/";
var defaultDateFormat = "dmy";
var dateSeparator = defaultDateSeparator;
var dateFormat = defaultDateFormat;
function displayDatePicker(dateFieldName, displayBelowThisObject, dtFormat, dtSep)
{
  var targetDateField = document.getElementsByName (dateFieldName).item(0);
  if (!displayBelowThisObject)
    displayBelowThisObject = targetDateField;
  if (dtSep)
    dateSeparator = dtSep;
  else
    dateSeparator = defaultDateSeparator;

  if (dtFormat)
    dateFormat = dtFormat;
  else
    dateFormat = defaultDateFormat;
  var x = displayBelowThisObject.offsetLeft;
  var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;
  var parent = displayBelowThisObject;
  while (parent.offsetParent) {
    parent = parent.offsetParent;
    x += parent.offsetLeft;
    y += parent.offsetTop ;
  }
  drawDatePicker(targetDateField, x, y);
}
function drawDatePicker(targetDateField, x, y)
{
  datePickerTempCanclose=true;
  var dt = getFieldDate(targetDateField.value );
  if (!document.getElementById(datePickerDivID)) {
    var newNode = document.createElement("div");
    newNode.setAttribute("id", datePickerDivID);
    newNode.setAttribute("class", "dpDiv");
    newNode.setAttribute("style", "visibility: hidden;");
    document.body.appendChild(newNode);
  }
  var pickerDiv = document.getElementById(datePickerDivID);
  pickerDiv.style.position = "absolute";
  pickerDiv.style.left = x + "px";
  pickerDiv.style.top = y + "px";
  pickerDiv.style.visibility = (pickerDiv.style.visibility == "visible" ? "hidden" : "visible");
  pickerDiv.style.display = (pickerDiv.style.display == "block" ? "none" : "block");
  pickerDiv.style.zIndex = 10000;
  refreshDatePicker(targetDateField.name, dt.getFullYear(), dt.getMonth(), dt.getDate());
}
function getLMSGMTDate(){
  try{
    var date = new Date();
    var tempDateArray1 = LMSGMT.split(' ');
 var tempDateArray2 = tempDateArray1[0].split('/');
 var ye = parseInt(tempDateArray2[2]);
 var mo = (parseInt(tempDateArray2[1])==0?parseInt(tempDateArray2[1].charAt(1)):parseInt(tempDateArray2[1]))-1;
 var da = (parseInt(tempDateArray2[0])==0?parseInt(tempDateArray2[0].charAt(1)):parseInt(tempDateArray2[0]));//parseInt(tempDateArray2[0]);
 var tempDateArray3 = tempDateArray1[1].split(':');
 var hour = tempDateArray3[0];
 var min = tempDateArray3[1];
 var sec = tempDateArray3[2];
 var thisDay = new Date(ye,mo,da,hour,min,sec);
 return thisDay;
  }catch(e){return new Date();}
}
function setDateTimePickerToFields(ids){
  var dateTimeArray = LMSGMT.split(' ');
var dateArray = dateTimeArray[0].split('/');
var timeArray = dateTimeArray[1].split(':');
var dateArg = parseInt(dateArray[2]+dateArray[1]+dateArray[0]);
var timeArg = timeArray[0]+timeArray[1];
var id=ids.split(",");
for(var i=0;i<id.length;i++){
var cal = Calendar.setup({
         onSelect: function(cal) {
           cal.hide();
 },
 date: dateArg,
 time:timeArg,
 showTime: 12
     });
     cal.manageFields(id[i], id[i], "%d/%b/%Y %H:%M:%S");
 cal.selection.set(dateArg);
 }
}
function refreshDatePicker(dateFieldName, year, month, day){
  /*var tempDateArray = LMSGMT.split('/');
  var ye = parseInt(tempDateArray[2])-1900;
  var mo = 0;
  var da = parseInt(tempDateArray[0]);
  for(var monIndex =0 ;monIndex<12;monIndex++){
   if(tempDateArray[1]==monthArrayShort[monIndex]){
   mo = monIndex;
   }
  }
  var thisDay = new Date(ye,mo,da);*/
  var thisDay = getLMSGMTDate();
  if ((month >= 0) && (year > 0)) {
   day = thisDay.getDate();
    thisDay = new Date(year, month, 1);
  } else {
    day = thisDay.getDate();
    thisDay.setDate(1);
  }
  var crlf = "\r\n";
  var TABLE = "<table cols=7 class='dpTable'>" + crlf;
  var xTABLE = "</table>" + crlf;
  var TR = "<tr class='dpTR'>";
  var TR_title = "<tr class='dpTitleTR'>";
  var TR_days = "<tr class='dpDayTR'>";
  var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
  var xTR = "</tr>" + crlf;
  var TD = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' onMouseDown=\"datePickerTempCanclose=false;\"";    // leave this tag open, because we'll be adding an onClick event
  var TD_title = "<td colspan=5 class='dpTitleTD'>";
  var TD_buttons = "<td class='dpButtonTD'>";
  var TD_todaybutton = "<td colspan=7 class='dpTodayButtonTD'>";
  var TD_days = "<td class='dpDayTD'>";
  var TD_selected = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' onMouseDown=\"datePickerTempCanclose=false;\" ";    // leave this tag open, because we'll be adding an onClick event
  var xTD = "</td>" + crlf;
  var DIV_title = "<div class='dpTitleText'>";
  var DIV_selected = "<div class='dpDayHighlight'>";
  var xDIV = "</div>";
  var html = TABLE;
  html += TR_title;
  html += TD_buttons + getButtonCode(dateFieldName, thisDay, -1, "&lt;") + xTD;
  html += TD_title + DIV_title + monthArrayShort[ thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
   html += TD_buttons + getButtonCode(dateFieldName, thisDay, 1, "&gt;") + xTD;
  html += xTR;
  html += TR_days;
  for(i = 0; i < dayArrayShort.length; i++)
  html += TD_days + dayArrayShort[i] + xTD;
  html += xTR;
  html += TR;
  for (i = 0; i < thisDay.getDay(); i++)
    html += TD + "&nbsp;" + xTD;
  do {
    dayNum = thisDay.getDate();
    TD_onclick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(thisDay) + "');\">";
    if (dayNum == day)
      html += TD_selected + TD_onclick + DIV_selected + dayNum + xDIV + xTD;
    else
      html += TD + TD_onclick + dayNum + xTD;
    if (thisDay.getDay() == 6)
      html += xTR + TR;  
    thisDay.setDate(thisDay.getDate() + 1);
  } while (thisDay.getDate() > 1)
  if (thisDay.getDay() > 0) {
    for (i = 6; i > thisDay.getDay(); i--)
      html += TD + "&nbsp;" + xTD;
  }
  html += xTR;
  var today = new Date();
  var todayString = "Today is " + dayArrayMed[today.getDay()] + ", " + monthArrayShort[ today.getMonth()] + " " + today.getDate();
  html += TR_todaybutton + TD_todaybutton;
  html += "<button class='dpTodayButton' onClick='refreshDatePicker(\"" + dateFieldName + "\");' onMouseDown=\"datePickerTempCanclose=false;\">this month</button> ";
  html += "<button class='dpTodayButton' onClick='updateDateField(\"" + dateFieldName + "\");'>close</button>";
  html += xTD + xTR;
  html += xTABLE;
  document.getElementById(datePickerDivID).innerHTML = html;
  adjustiFrame();
}
function getButtonCode(dateFieldName, dateVal, adjust, label)
{
  var newMonth = (dateVal.getMonth () + adjust) % 12;
  var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
  if (newMonth < 0) {
    newMonth += 12;
    newYear += -1;
  }
  return "<button class='dpButton' onMouseDown=\"datePickerTempCanclose=false;\" onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</button>";
}
function getDateString(dateVal)
{
  var dayString = "00" + dateVal.getDate();
  var monthString =monthArrayShort[ dateVal.getMonth()];
  dayString = dayString.substring(dayString.length - 2);
  monthString = monthString.substring(monthString.length - 3);
  switch (dateFormat) {
    case "dmy" :
      return dayString + dateSeparator + monthString + dateSeparator + dateVal.getFullYear();
    case "ymd" :
      return dateVal.getFullYear() + dateSeparator + monthString + dateSeparator + dayString;
    case "mdy" :
    default :
      return monthString + dateSeparator + dayString + dateSeparator + dateVal.getFullYear();
  }
}
function getFieldDate(dateString)
{
  var dateVal;
  var dArray;
  var d, m, y;
  try {
    dArray = splitDateString(dateString);
    if (dArray) {
      switch (dateFormat) {
        case "dmy" :
          d = parseInt(dArray[0], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
        case "ymd" :
          d = parseInt(dArray[2], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[0], 10);
          break;
        case "mdy" :
        default :
          d = parseInt(dArray[1], 10);
          m = parseInt(dArray[0], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
      }
      dateVal = new Date(y, m, d);
    } else if (dateString) {
      dateVal = new Date(dateString);
    } else {
      dateVal = getLMSGMTDate();
    }
  } catch(e) {
    dateVal = getLMSGMTDate();
  }
  return dateVal;
}
function splitDateString(dateString)
{
  var dArray;
  if (dateString.indexOf("/") >= 0)
    dArray = dateString.split("/");
  else if (dateString.indexOf(".") >= 0)
    dArray = dateString.split(".");
  else if (dateString.indexOf("-") >= 0)
    dArray = dateString.split("-");
  else if (dateString.indexOf("\\") >= 0)
    dArray = dateString.split("\\");
  else
    dArray = false;
  return dArray;
}
function updateDateField(dateFieldName, dateString)
{
  var targetDateField = document.getElementsByName (dateFieldName).item(0);
  if (dateString)
    targetDateField.value = dateString;
  var pickerDiv = document.getElementById(datePickerDivID);
  pickerDiv.style.visibility = "hidden";
  pickerDiv.style.display = "none";
  adjustiFrame();
  targetDateField.focus();
  if ((dateString) && (typeof(datePickerClosed) == "function"))
    datePickerClosed(targetDateField);
}
function adjustiFrame(pickerDiv, iFrameDiv)
{
  var is_opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
  if (is_opera)
    return;
  try {
    if (!document.getElementById(iFrameDivID)) {
      var newNode = document.createElement("iFrame");
      newNode.setAttribute("id", iFrameDivID);
      newNode.setAttribute("src", "javascript:false;");
      newNode.setAttribute("scrolling", "no");
      newNode.setAttribute ("frameborder", "0");
      document.body.appendChild(newNode);
    }
    if (!pickerDiv)
      pickerDiv = document.getElementById(datePickerDivID);
    if (!iFrameDiv)
      iFrameDiv = document.getElementById(iFrameDivID);
    try {
      iFrameDiv.style.position = "absolute";
      iFrameDiv.style.width = pickerDiv.offsetWidth;
      iFrameDiv.style.height = pickerDiv.offsetHeight ;
      iFrameDiv.style.top = pickerDiv.style.top;
      iFrameDiv.style.left = pickerDiv.style.left;
      iFrameDiv.style.zIndex = pickerDiv.style.zIndex - 1;
      iFrameDiv.style.visibility = pickerDiv.style.visibility ;
      iFrameDiv.style.display = pickerDiv.style.display;
    } catch(e) {
    }
  } catch (ee) {
  }
}
function closeDateField(){
var pickerDiv = document.getElementById(datePickerDivID);
if(pickerDiv){
 pickerDiv.style.visibility = "hidden";
 pickerDiv.style.display = "none";
 adjustiFrame();
   }
   return true;
}
/*   ----------- Date picker end -----------  */


.css:

/*Date picker  start*/

/* the div that holds the date picker calendar */
.dpDiv {
}
/* the table (within the div) that holds the date picker calendar */
.dpTable {
font-family:Arial,Helvetica,sans-serif;
font-size: 11px;
text-align: center;
color: #000000;
background-color: #EEEEEE;
border: 1px solid #888888;


}
/* a table row that holds date numbers (either blank or 1-31) */
.dpTR {
}
/* the top table row that holds the month, year, and forward/backward buttons */
.dpTitleTR {
}
/* the second table row, that holds the names of days of the week (Mo, Tu, We, etc.) */
.dpDayTR {
}
/* the bottom table row, that has the "This Month" and "Close" buttons */
.dpTodayButtonTR {
}
/* a table cell that holds a date number (either blank or 1-31) */
.dpTD {
border: 1px solid #C6C6C6;
white-space: nowrap;
}
/* a table cell that holds a highlighted day (usually either today's date or the current date field value) */
.dpDayHighlightTD {
background-color: #C6C6C6;
border: 1px solid #888888;
}
/* the date number table cell that the mouse pointer is currently over (you can use contrasting colors to make it apparent which cell is being hovered over) */
.dpTDHover {
background-color: #C6C6C6;
border: 1px solid #888888;
cursor: pointer;
color: #000000;
}
/* the table cell that holds the name of the month and the year */
.dpTitleTD {
}
/* a table cell that holds one of the forward/backward buttons */
.dpButtonTD {
}
/* the table cell that holds the "This Month" or "Close" button at the bottom */
.dpTodayButtonTD {
white-space: nowrap;
}
/* a table cell that holds the names of days of the week (Mo, Tu, We, etc.) */
.dpDayTD {
background-color: #C6C6C6;
border: 1px solid #888888;
color: #000000;
}
/* additional style information for the text that indicates the month and year */
.dpTitleText {
font-size: 12px;
color: #000000;
font-weight: bold;
}
/* additional style information for the cell that holds a highlighted day (usually either today's date or the current date field value) */
.dpDayHighlight {
background-color: #C6C6C6;
color: #000000;
font-weight: bold;
}
/* the forward/backward buttons at the top */
.dpButton {
font-family:Arial,Helvetica,sans-serif;
font-size: 11px;
color: #000000;
background: #C6C6C6;
font-weight: bold;
border: 1px solid #888888;
padding: 1px;
}
/* the "This Month" and "Close" buttons at the bottom */
.dpTodayButton {
font-family:Arial,Helvetica,sans-serif;
font-size: 11px;
color: #000000;
border: 1px solid #888888;
background: #C6C6C6;
font-weight: bold;
padding: 1px;
}


/*Date picker end*/

Web based cron job for calling an asp.net web page at specified intervals

   If you want a task to be executed once a day or at a specified interval of time,

        Online Free Web Cron   it will do a task at a specified interval based on indian time also...

Custom Pagination Class in asp.net

The following example will illustrate about custom pagination using a class ,

In your aspx page:

<asp:GridView ID="GridView1" runat="server">
        </asp:GridView>
      
        <br />
        <asp:Label ID="lblCurrentPage" runat="server" Visible="false"></asp:Label>
        <div id="pageIndexer" runat="server" class="pager">
            <asp:LinkButton id="btnFirst" runat="server" Text=" First " CssClass="page-numbers prev" onCommand="Nav_OnClick" CommandName="First"  />
            <asp:LinkButton id="btnPrev" runat="server" Text=" Prev " CssClass="page-numbers prev" onCommand="Nav_OnClick" CommandName="Prev"  />
            <asp:LinkButton ID="lnkbtn0" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn1" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn2" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn3" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn4" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn5" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn6" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn7" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn8" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton ID="lnkbtn9" CssClass="page-numbers" runat="server" onCommand="Nav_OnClick" CommandName="Page" />
            <asp:LinkButton id="btnNext" runat="server" Text=" Next " CssClass="page-numbers next" onCommand="Nav_OnClick" CommandName="Next" />
            <asp:LinkButton id="btnLast" runat="server" Text=" Last " CssClass="page-numbers prev" onCommand="Nav_OnClick" CommandName="Last"  />
            <asp:HiddenField ID="HfFirst" runat="server" />
            <asp:HiddenField ID="HfLast" runat="server" />

In aspx.cs page:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindData(); //By default your grid section will be disabled.
        }
    }
    protected void BindData()
    {
        //Write your code for Button click
        getData(gridPageSize, 1); //Default first page will be binded to grid.
    }
    protected void Nav_OnClick(object sender, CommandEventArgs e)
    {

        int _currentPageNumber = 1;
        switch (e.CommandName)
        {
            case "First":
                _currentPageNumber = 1;
                break;
            case "Prev":
                _currentPageNumber = Int32.Parse(lblCurrentPage.Text) - 1;
                break;
            case "Page":
                LinkButton lnkbutton = (LinkButton)sender;
                _currentPageNumber = Int32.Parse(lnkbutton.Text);
                break;
            case "Next":
                _currentPageNumber = Int32.Parse(lblCurrentPage.Text) + 1;
                break;
            case "Last":
                _currentPageNumber = Int32.Parse(HfLast.Value);
                break;
        }
        getData(gridPageSize, _currentPageNumber);

    }
    private void getData(int pageSize, int pageIndex)
    {
        try
        {
            string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["database"].ConnectionString;

            //Prepare Sql connection
            SqlConnection con = new SqlConnection(connectString);
            con.Open();

            //Prepare Sql Command
            SqlCommand cmd = new SqlCommand("dbo.GetProducts", con);
            cmd.CommandType = CommandType.StoredProcedure;


            SqlParameter sqlPar2 = cmd.Parameters.Add("@CurrentPage", SqlDbType.Int);
            sqlPar2.Value = pageIndex;

            SqlParameter sqlPar3 = cmd.Parameters.Add("@PageSize", SqlDbType.Int);
            sqlPar3.Value = pageSize;

            //Use Data Adapter to get results
            SqlDataAdapter da = new SqlDataAdapter(cmd);

            DataSet ds = new DataSet();
            da.Fill(ds);

            if (ds.Tables[0].Rows.Count > 0)
                //DataToGrid(ds, pageIndex);
                Pagination.DataToGrid(GridView1, ds, pageIndex, lblCurrentPage, btnPrev, btnNext,btnFirst,btnLast,HfLast);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }


Pagination Class:

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
/// Summary description for BaseClass
/// </summary>
public class Pagination : System.Web.UI.Page
{
    public static int startPage = 1; //For Custom grid Index
    public static int endPage = 11; //For custom Grid Index
    public static int gridPageSize = 2; //Number of grid records
    public void DataToGrid(GridView gridView1, DataSet ds, int currentPage, HtmlGenericControl displayResults, Label lblCurrentPage, LinkButton btnPrev, LinkButton btnNext, LinkButton btnFirst,LinkButton btnLast, HiddenField HfLast)
    {
        gridView1.DataSource = ds.Tables[0];
        gridView1.DataBind();

        int totalCount = Convert.ToInt32(ds.Tables[1].Rows[0]["TotalCount"].ToString());
        HfLast.Value = ds.Tables[2].Rows[0].ItemArray[0].ToString();
        changeControlsText(totalCount, currentPage, gridPageSize, lblCurrentPage, btnPrev, btnNext, btnFirst, btnLast);
        displayResults.Style.Add("Display", "inline");
    }
    public void changeControlsText(int totalCount, int currentPage, int gridPageSize, Label lblCurrentPage, LinkButton btnPrev, LinkButton btnNext, LinkButton btnFirst, LinkButton btnLast)
    {
        int remainder = 0;
        int totalPages = 0;
        Math.DivRem(totalCount, gridPageSize, out remainder);
        if (remainder == 0)
            totalPages = totalCount / gridPageSize;
        else
            totalPages = (totalCount / gridPageSize) + 1;

        //Using the total count & gridPage size we have found out the total number of pages

        lblCurrentPage.Text = currentPage.ToString();
        //This label is hidden label, which will be having the current page user is looking at.

        EnableLinkButtons(currentPage, totalPages,btnPrev,btnNext,btnFirst,btnLast);
        //Call this function to Enable or disable appropriate Link Buttons.
    }
    public void EnableLinkButtons(int currentPage, int totalPages, LinkButton btnPrev, LinkButton btnNext, LinkButton btnFirst, LinkButton btnLast)
    {
        //If we got only one page, then disable previous & next button.
        if (totalPages == 1)
        {
            btnPrev.Enabled = false;
            btnNext.Enabled = false;
            btnFirst.Enabled = false;
            btnLast.Enabled = false;
        }
        else
        {
            //we got more than one page, then how the button should show?
            if (currentPage == 1) //if the current page is '1' then Previous button is disable & Next button is enabled.
            {
                btnPrev.Enabled = false;
                btnNext.Enabled = true;
                btnFirst.Enabled = false;
                btnLast.Enabled = true;
            }
            else if (currentPage == totalPages) //If we are on the last page then disable Next button and enable Prev button.
            {
                btnPrev.Enabled = true;
                btnNext.Enabled = false;
                btnFirst.Enabled = true;
                btnLast.Enabled = false;
            }
            else //Neither of the above then enable both Prev and Next buttons.
            {
                btnPrev.Enabled = true;
                btnNext.Enabled = true;
                btnFirst.Enabled = true;
                btnLast.Enabled = true;
            }
        }
        //Now we are done with Next & prev buttons, now render our pager buttons.

        //Set the startpage of indexer
        if (currentPage > endPage - 1) //If user click on last button of your page indexer Then what show we do?
        {
            if (totalPages - currentPage < 4) //here 4 is total buttons/2 ( middle)
            {
                startPage = totalPages - 9; // instead of 8 you can customize on your own.
            }
            else
                startPage = currentPage - 4; //4 is middle number
        }
        else if (currentPage < startPage + 1)//What if user clicks on first button of page indexer?
        {
            startPage = currentPage - 4;
        }

        if (startPage < 1) //if some how the logic above goes to negative then make sure your start page is always 1.
            startPage = 1;

        string controlID = "";
        int value;
        for (int i = 0; i < 10; i++)
        {
            controlID = "lnkbtn" + i.ToString();//Get your link button id.
            value = startPage + i;//Assign a value to it.
            if (value <= totalPages) //so Enable all the pages till you meet cross 8 or you reached max pages.
            {
                makeVisibleButtons(controlID, value.ToString(), currentPage, true);
                endPage = value;
            }
            else
                makeVisibleButtons(controlID, value.ToString(), currentPage, false);
        }
    }
    public void makeVisibleButtons(string ControlID, string value, int currentPage, bool vsble)
    {
        LinkButton linkBtn = (LinkButton)FindControl(ControlID);
        linkBtn.Visible = vsble;
        linkBtn.Text = value;
        if (currentPage == Int32.Parse(value))
        {
            linkBtn.CssClass = "page-numbers current";
        }
        else
        {
            linkBtn.CssClass = "page-numbers";
        }
    }
}


CSS for Pagination:
.pager {
margin-bottom:10px;
margin-top:10px;
}
.page-numbers {
border:1px solid #CCCCCC;
color:#808185;
display:block;
float:left;
font-family:Trebuchet MS,Helvetica,sans-serif;
font-size:130%;
margin-right:3px;
padding:4px 4px 3px;
text-decoration:none;
}
.page-numbers.desc {
border:medium none;
}
.page-numbers:hover {
text-decoration:none;
}
.page-numbers.next, .page-numbers.prev {
border:1px solid #FFFFFF;
}
.page-numbers.current {
background-color:#808185;
border:1px solid #808185;
color:#FFFFFF;
font-weight:bold;
}
.page-numbers.dots {
border:1px solid #FFFFFF;
}

Stored procedure:

CREATE PROCEDURE GetProducts
(
@CurrentPage INT,
@PageSize INT
)
AS

    SELECT ROW_NUMBER() OVER (ORDER BY [Name]) AS Row,ProductId,[Name],[Description],Price FROM  
     (
     SELECT
      ROW_NUMBER() OVER (ORDER BY [Name]) AS Row,
      ProductId,
      [Name],
      [Description],
      Price
     FROM Product
     ) AS ProductWithRowNumbers
    WHERE  Row >= (@CurrentPage - 1) * @PageSize + 1 AND Row <= @CurrentPage*@PageSize

    SELECT COUNT(*) as TotalCount FROM Product
  
    SELECT  CEILING(COUNT(*) / CAST(@PageSize AS FLOAT)) NumberOfPages
     FROM  Product



SELECT ROW_NUMBER() OVER (ORDER BY Emp_Id) AS Row,Emp_Id,Emp_Name,[Address],Desig_Name,SalaryBasis,FixedSalary FROM  
     (
     SELECT
      ROW_NUMBER() OVER (ORDER BY Emp_Id) AS Row,Emp_Id,Emp_Name,[Address],Desig_Name,SalaryBasis,FixedSalary
       FROM Employee_View
     ) AS EmpWitRowNos
    WHERE  Row >= (@CurrentPage - 1) * @PageSize + 1 AND Row <= @CurrentPage*@PageSize

    SELECT COUNT(*) as TotalCount FROM Employee_View
  
    SELECT  CEILING(COUNT(*) / CAST(@PageSize AS FLOAT)) NumberOfPages
     FROM  Employee_View



Try this for custom pagination in gridview....

Monday, November 23, 2009

Javascript to convert Youtube video page url to video url

The following Javascript to convert Youtube video page url to video url,
function GetVideoUrl()
    {
        var url = "http://www.youtube.com/watch?v=8tbh4K0wsJ8&feature=fvst";
        var startoffset = url.indexOf("v=")+2;
        url = url.substring(startoffset);
        var endoffset = url.indexOf("&");
        if (endoffset != -1)
        url = url.substring(0, endoffset);
        url="http://www.youtube.com/v/"+url;
        alert(url);
    }

 

Show YouTube Video in an asp.net page

Include the following in ur aspx page,

<object width="425" height="355"><param name="movie" value="YouTube Video Link"></param><param name="wmode" value="transparent"></param>
    <embed src="http://www.youtube.com/v/8tbh4K0wsJ8" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355">
    </embed>
    </object>

Import Address Book From Gmail/hotmail/yahoo using c# and asp.net

To import address book from Gmail/Hotmail/Yahoo using c# and asp.net

Javascript to convert indian rupees in numbers to words

The following Javascript function is used to convert indian rupees in numbers to words

function test_skill() {
    var junkVal=document.getElementById('rupees').value;
    junkVal=Math.floor(junkVal);
    var obStr=new String(junkVal);
    numReversed=obStr.split("");
    actnumber=numReversed.reverse();

    if(Number(junkVal) >=0){
        //do nothing
    }
    else{
        alert('wrong Number cannot be converted');
        return false;
    }
    if(Number(junkVal)==0){
        document.getElementById('container').innerHTML=obStr+''+'Rupees Zero Only';
        return false;
    }
    if(actnumber.length>9){
        alert('Oops!!!! the Number is too big to covertes');
        return false;
    }

    var iWords=["Zero", " One", " Two", " Three", " Four", " Five", " Six", " Seven", " Eight", " Nine"];
    var ePlace=['Ten', ' Eleven', ' Twelve', ' Thirteen', ' Fourteen', ' Fifteen', ' Sixteen', ' Seventeen', ' Eighteen', ' Nineteen'];
    var tensPlace=['dummy', ' Ten', ' Twenty', ' Thirty', ' Forty', ' Fifty', ' Sixty', ' Seventy', ' Eighty', ' Ninety' ];

    var iWordsLength=numReversed.length;
    var totalWords="";
    var inWords=new Array();
    var finalWord="";
    j=0;
    for(i=0; i<iWordsLength; i++){
        switch(i)
        {
        case 0:
            if(actnumber[i]==0 || actnumber[i+1]==1 ) {
                inWords[j]='';
            }
            else {
                inWords[j]=iWords[actnumber[i]];
            }
            inWords[j]=inWords[j];
            break;
        case 1:
            tens_complication();
            break;
        case 2:
            if(actnumber[i]==0) {
                inWords[j]='';
            }
            else if(actnumber[i-1]!=0 && actnumber[i-2]!=0) {
                inWords[j]=iWords[actnumber[i]]+' Hundred and';
            }
            else {
                inWords[j]=iWords[actnumber[i]]+' Hundred';
            }
            break;
        case 3:
            if(actnumber[i]==0 || actnumber[i+1]==1) {
                inWords[j]='';
            }
            else {
                inWords[j]=iWords[actnumber[i]];
            }
            if(actnumber[i+1] != 0 || actnumber[i] > 0){
                inWords[j]=inWords[j]+" Thousand";
            }
            break;
        case 4:
            tens_complication();
            break;
        case 5:
            if(actnumber[i]==0 || actnumber[i+1]==1 ) {
                inWords[j]='';
            }
            else {
                inWords[j]=iWords[actnumber[i]];
            }
            inWords[j]=inWords[j]+" Lakh";
            break;
        case 6:
            tens_complication();
            break;
        case 7:
            if(actnumber[i]==0 || actnumber[i+1]==1 ){
                inWords[j]='';
            }
            else {
                inWords[j]=iWords[actnumber[i]];
            }
            inWords[j]=inWords[j]+" Crore";
            break;
        case 8:
            tens_complication();
            break;
        default:
            break;
        }
        j++;
    }

    function tens_complication() {
        if(actnumber[i]==0) {
            inWords[j]='';
        }
        else if(actnumber[i]==1) {
            inWords[j]=ePlace[actnumber[i-1]];
        }
        else {
            inWords[j]=tensPlace[actnumber[i]];
        }
    }
    inWords.reverse();
    for(i=0; i<inWords.length; i++) {
        finalWord+=inWords[i];
    }
        return finalWord;
    //document.getElementById('container').innerHTML=obStr+'  '+;
      
}

function paisa_conver(){
        var finalWord1 = test_skill();
            var finalWord2;
    var val = document.getElementById('rupees').value;
        if(val.indexOf('.')!=-1)
    {
          val = val.substring(val.indexOf('.')+1,val.length);
              if(val.length==0){
           finalWord2 = "zero paisa only";
          }
              else{
               document.getElementById('rupees').value = val;
           finalWord2 = test_skill() + " paisa only";
              }
    }
        else{
          finalWord2 = "zero paisa only";
    }
    document.getElementById('container').innerHTML=finalWord1 +" and "+finalWord2;
  
}

nhibernate with asp.net mvc

The following links would be very useful for using nhibernate with asp.net mvc


http://www.sharparchitecture.net/


http://nhforge.org/doc/nh/en/index.html

Sunday, November 22, 2009

Javascript function to generate yui datatable with json data

The following Javascript function to generate yui datatable with json data,

function generateDatatable(target,jsonObj,myColumnDefs,hfId){
var root;
for(key in jsonObj){
root = key; break;
}
var rootId = "id";
if(jsonObj[root].length>0){
for(key in jsonObj[root][0]){
rootId = key; break;
}
}
YAHOO.example.DynamicData = function() {
var myPaginator = new YAHOO.widget.Paginator({
rowsPerPage: 5,
template: YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE,
rowsPerPageOptions: [10,25,50,100],
pageLinks: 10 });
// DataSource instance
var myDataSource = new YAHOO.util.DataSource(jsonObj);
myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
myDataSource.responseSchema = {resultsList: root,fields:new Array()};
myDataSource.responseSchema.fields[0]=rootId;
for(var i=0;i
myDataSource.responseSchema.fields[i+1] = myColumnDefs[i].key;
}
// DataTable configuration
var myConfigs = {
sortedBy : {key:myDataSource.responseSchema.fields[1], dir:YAHOO.widget.DataTable.CLASS_ASC}, // Sets UI initial sort arrow
paginator : myPaginator
};
// DataTable instance
var myDataTable = new YAHOO.widget.DataTable(target, myColumnDefs, myDataSource, myConfigs);
myDataTable.subscribe("rowMouseoverEvent", myDataTable.onEventHighlightRow);
myDataTable.subscribe("rowMouseoutEvent", myDataTable.onEventUnhighlightRow);
myDataTable.subscribe("rowClickEvent", myDataTable.onEventSelectRow);
myDataTable.subscribe("checkboxClickEvent", function(oArgs){
var hidObj = document.getElementById(hfId);
var elCheckbox = oArgs.target;
var oRecord = this.getRecord(elCheckbox);
var id=oRecord.getData(rootId);
if(elCheckbox.checked){
if(hidObj.value == ""){
hidObj.value = id;
}
else{
hidObj.value += "," + id;
}
}
else{
hidObj.value = removeIdFromArray(""+hfId,id);
}
});
myPaginator.subscribe("changeRequest", function (){
if(document.getElementById(hfId).value != "")
{
if(document.getElementById("ConfirmationPanel").style.display=='block')
{
document.getElementById("ConfirmationPanel").style.display='none';
}
document.getElementById(hfId).value="";
}
return true;
});
myDataTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
oPayload.totalRecords = oResponse.meta.totalRecords;
return oPayload;
}
return {
ds: myDataSource,
dt: myDataTable
};
}();
}
function removeIdFromArray(values,id){
values=document.getElementById(values).value;
if(values.indexOf(',')==0){
values=values.substring(1);
}
if(values.indexOf(values.length-1)==","){
values=values.substring(0,values.length-1);
}
var ids=values.split(',');
var rtnValue="";
for(var i=0;i
if(ids[i]!=id){
rtnValue+=","+ids[i];
}
}
if(rtnValue.indexOf(",")==0){
rtnValue=rtnValue.substring(1);
}
return rtnValue;
}