Call Events with Delegate in C#

Scenario: Call method of 2nd Class while calling method of 1st Class using delegates.
                       “Call friends when employee get promoted”

Example:
    delegate void PromoteDelegate(string eName);
    class Program
    {
        //PM
        static void Main(string[] args)
        {
            Friend f = new Friend();
            Employee e = new Employee();
            e.pd += new PromoteDelegate(f.CallWhenPromoted);
            e.Promoted("Mehul");

            //e.pd();
            Console.ReadLine();
        }
    }

    class Employee
    {
        public event PromoteDelegate pd;
        public void Promoted(string eName)
        {
            Console.WriteLine("Congratulation! Employee {0} 
            get promoted...",eName);
            Console.WriteLine("Calling Delegate...");
            pd("Mehul's friend");
        }
    }

    class Friend
    {
        public void CallWhenPromoted(string fName)
        {
            Console.WriteLine("Thanks for calling {0}...", fName);
        }
    }
  
Output:
            Congratulation! Employee Mehul get promoted...
            Calling Delegate...
            Thanks for calling Mehul's friend...

Extension Methods in C#


Extension methods allow you to extend an existing type with new functionality, without having to sub-class or recompile the old type.

Key Points:
         1: Extension Class must be static
         2: Extension Method must be static
         3: 1st Param in extension method must contains type which are geting extended    

Example:
    class Program
    {
        static void Main(string[] args)
        {
            //Default String
            String str = "My Name is XYZ";

            //LINQ Query to get count of vowels (use of Extension method)
            var queryChar = from ch in str.ToUpper()
                        where ch.IsVowel()
                        select ch;
            //Display result
            Console.WriteLine("Calling Char Extension Method:");
            Console.WriteLine("String \"{0}\" contains {1} Vowels", str, 
            queryChar.Count());
            Console.WriteLine();

            //Count Words in string (use of Extension method)
            int countWords = str.CountWords();
            Console.WriteLine("Calling String Extension Method:");
            Console.WriteLine("String \"{0}\" contains {1} Words", str, 
            countWords);
            Console.WriteLine();

            //Get Factorial from given integer  (use of Extension method)
            Console.WriteLine("Enter an integer to get factorial");
            int i =  int.Parse(Console.ReadLine());
            Console.WriteLine("Calling Int Extension Method:");
            Console.WriteLine("Factorial of {0} is: {1}", i, i.GetFactorial());

            Console.ReadLine();           
        }
    }

    /*Creating Extension Method*/
    static class Exten
    {
        public static bool IsVowel(this char ch)
        {
            return "AEIOU".Contains(ch);
        }

        public static int CountWords(this string str)
        {
            return str.Split(new char[] { ' ', '.', '?' },
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
        public static Int64 GetFactorial(this int x)
        {
            if (x <= 1) return 1;
            if (x == 2) return 2;
            else
                return x * GetFactorial(x - 1);
        }
    }

Output:
Calling Char Extension Method:
String "My Name is XYZ" contains 3 Vowels

Calling String Extension Method:
String "My Name is XYZ" contains 4 Words

Enter an integer to get factorial
8
Calling Int Extension Method:
Factorial of 8 is: 40320

Delegate in C#

What is a Delegate?
A delegate is a type that references a method. Once a delegate is assigned a method, it behaves exactly like that method. The delegate method can be used like any other method, with parameters and a return value.

Declaration:
             public delegate returntype_of_delegate delegate_name();

Important Points:
•         Delegates are similar to C++ function pointers, but are type safe.
•         Delegates allow methods to be passed as parameters.
•         Delegates can be used to define callback methods.
•         Delegates can be chained together; for example, multiple methods can be called on a single event.
•         You can use delegates without parameters or with parameter list
•         You should follow the same syntax as in the method
(If you are referring to the method with two int parameters and int return type, the delegate which you are declaring should be in the same format. This is why it is referred to as type safe function pointer.)

Basic Example:
    //[a.m]delegate returntype DelegateName(Pl);
    delegate int MyDel(int a, int b);
    class Program
    {
        static void Main(string[] args)
        {
            SimpleMath sm = new SimpleMath();
            //MyDel md1 = new MyDel(SimpleMath.Sub);
            //MyDel md2 = new MyDel(sm.Add);
            //MyDel md3 = md1 + md2;
            MyDel md = new MyDel(SimpleMath.Sub);
            md += new MyDel(SimpleMath.Add);
            //Console.WriteLine(md(20,10));

            Delegate[] dels = md.GetInvocationList();
            foreach (Delegate item in dels)
            {
                Console.WriteLine();
                object[] obj = { 20, 10 };
                Console.WriteLine("Delegate for method {0} called; Result: {1}",                            item.Method.Name, item.Method.Invoke(null, obj));
            }
            Console.ReadLine();
        }
    }
    class SimpleMath
    {
        public static int Add(int num1, int num2)
        {
            return num1 + num2;
        }
        public static int Sub(int num1, int num2)
        {
            return num1 - num2;
        }
    }

Output:
Delegate for method Sub called; Result: 10
Delegate for method Add called; Result: 30

Example Combine Delegates:
delegate void Del(string s);
        class TestClass
        {
            static void Hello(string s)
            {
                System.Console.WriteLine("  Hello, {0}!", s);
            }

            static void Goodbye(string s)
            {
                System.Console.WriteLine("  Goodbye, {0}!", s);
            }

            static void Main()
            {
                Del a, b, c, d;

                // Create the delegate object a that references
                // the method Hello:
                a = Hello;

                // Create the delegate object b that references
                // the method Goodbye:
                b = Goodbye;

                // The two delegates, a and b, are composed to form c:
                c = a + b;

                // Remove a from the composed delegate, leaving d,
                // which calls only the method Goodbye:
                d = c - a;

                System.Console.WriteLine("Invoking delegate a:");
                a("A");
                System.Console.WriteLine("Invoking delegate b:");
                b("B");
                System.Console.WriteLine("Invoking delegate c:");
                c("C");
                System.Console.WriteLine("Invoking delegate d:");
                d("D");
            }
        }

Output:
Invoking delegate a:
  Hello, A!
Invoking delegate b:
  Goodbye, B!
Invoking delegate c:
  Hello, C!
  Goodbye, C!
Invoking delegate d:
  Goodbye, D!

Encrypt/Decrypt String in C#

using System.Security.Cryptography;
using System.IO;

static byte[] keys = ASCIIEncoding.ASCII.GetBytes("friction");

public static string StringEncrypt(string originalString)
        {

            if (String.IsNullOrEmpty(originalString))
            {
                throw new ArgumentNullException
                       ("The string which needs to be encrypted can not be null.");
            }
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream,
                cryptoProvider.CreateEncryptor(keys, keys), CryptoStreamMode.Write);
            StreamWriter writer = new StreamWriter(cryptoStream);
            writer.Write(originalString);
            writer.Flush();
            cryptoStream.FlushFinalBlock();
            writer.Flush();
            return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
        }


public static string StringDecrypt(string cryptedString)
        {
            if (String.IsNullOrEmpty(cryptedString))
            {
                throw new ArgumentNullException
                   ("The string which needs to be decrypted can not be null.");
            }
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
            MemoryStream memoryStream = new MemoryStream
                    (Convert.FromBase64String(cryptedString));
            CryptoStream cryptoStream = new CryptoStream(memoryStream,
                cryptoProvider.CreateDecryptor(keys, keys), CryptoStreamMode.Read);
            StreamReader reader = new StreamReader(cryptoStream);
            return reader.ReadToEnd();
        }

using Statement in C#

The using statement ensures that Dispose is called even if an exception occurs while you are calling methods on the object


Example:

using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}

You can achieve the same result by putting the object inside a try block and then calling Dispose in a finally block; in fact, this is how the using statement is translated by the compiler.

{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}

Multiple instances of a type can be declared in a using statement.

using (Font font3 = new Font("Arial", 10.0f),
font4 = new Font("Arial", 10.0f))
{
// Use font3 and font4.
}

Excel Workbook to XML or Database

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace ReadExcelFile
{
class Program
{
static void Main(string[] args)
{
OleDbConnection connExcelFile = new OleDbConnection();
DataTable dt = null;
DataTable tblFileTables;
string currentTbl = string.Empty;
int tblCount = 0;
connExcelFile.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fileName.xls;Extended Properties=\"EXCEL 8.0;HDR=NO\";";
try
{
connExcelFile.Open();
dt = connExcelFile.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
tblFileTables = connExcelFile.GetSchema("Tables");
tblCount = tblFileTables.Rows.Count;
if (!(dt == null))
{
foreach (DataRow dr in dt.Rows)
{
currentTbl = dr["TABLE_NAME"].ToString();
if (string.IsNullOrEmpty(currentTbl))
{
continue;
}
currentTbl.Replace("'", "");
if (currentTbl.EndsWith("$'") || currentTbl.EndsWith("$"))
{
string testString = "Select * FROM [" + currentTbl + "]";
OleDbCommand cmd = new OleDbCommand(testString, connExcelFile);
try
{
//// If the query can not execute due to sheet error igore the sheet.
//// Else add to sheet list.
OleDbDataAdapter tblAdpt = new OleDbDataAdapter(cmd);
tblAdpt.Fill(tblFileTables);
tblFileTables.WriteXml(".\\" + currentTbl + ".xml");
break;
}
catch (InvalidOperationException e)
{
throw e;
}
catch (OleDbException e)
{
throw e;
// If sheet invalid ignore sheet.
}
}

}
}


}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
}

ASP.Net Page Life Cycle in Brief

Event: PreInit
Use:
Use this event for the following:
• Check the IsPostBack property to determine whether this is the first time the page is being processed.
• Create or re-create dynamic controls.
• Set a master page dynamically.
• Set the Theme property dynamically.
• Read or set profile property values.
Note:
If the request is a postback, the values of the controls have not yet been restored from view state. If you set a control property at this stage, its value might be overwritten in the next event.

Event: Init
Use: Raised after all controls have been initialized and any skin settings have been applied. Use this event to read or initialize control properties.

Event: InitComplete
Use: Raised by the Page object. Use this event for processing tasks that require all initialization be complete.

Event: PreLoad
Use: Use this event if you need to perform processing on your page or control before the Load event.
Before the Page instance raises this event, it loads view state for itself and all controls, and then processes any postback data included with the Request instance.

Event: Load
Use: The Page calls the OnLoad event method on the Page, then recursively does the same for each child control, which does the same for each of its child controls until the page and all controls are loaded.
Use the OnLoad event method to set properties in controls and establish database connections.

Event: Control events
Use: Use these events to handle specific control events, such as a Button control's Click event or a TextBox control's TextChanged event.
Note: In a postback request, if the page contains validator controls, check the IsValid property of the Page and of individual validation controls before performing any processing.

Event: LoadComplete
Use: Use this event for tasks that require that all other controls on the page be loaded.

Event: PreRender
Use: Before this event occurs:
• The Page object calls EnsureChildControls for each control and for the page.
• Each data bound control whose DataSourceID property is set calls its DataBind method. For more information, see Data Binding Events for Data-Bound Controls later in this topic.
The PreRender event occurs for each control on the page. Use the event to make final changes to the contents of the page or its controls.

Event: SaveStateComplete
Use: Before this event occurs, ViewState has been saved for the page and for all controls. Any changes to the page or controls at this point will be ignored.
Use this event perform tasks that require view state to be saved, but that do not make any changes to controls.

Event: Render
Use: This is not an event; instead, at this stage of processing, the Page object calls this method on each control. All ASP.NET Web server controls have a Render method that writes out the control's markup that is sent to the browser.
If you create a custom control, you typically override this method to output the control's markup. However, if your custom control incorporates only standard ASP.NET Web server controls and no custom markup, you do not need to override the Render method. For more information, see Developing Custom ASP.NET Server Controls.
A user control (an .ascx file) automatically incorporates rendering, so you do not need to explicitly render the control in code.

Event: Unload
Use: This event occurs for each control and then for the page. In controls, use this event to do final cleanup for specific controls, such as closing control-specific database connections.
For the page itself, use this event to do final cleanup work, such as closing open files and database connections, or finishing up logging or other request-specific tasks.
Note:
During the unload stage, the page and its controls have been rendered, so you cannot make further changes to the response stream. If you attempt to call a method such as the Response.Write method, the page will throw an exception.

Allow only Numeric key press in java script

Write this function in onkeypress(onkeypress="return allowOnlyNumeric(event,numeric);") of the control:

var numbers = '1234567890';
var numeric = '1234567890.';
function allowOnlyNumeric(e, allow) {
var chCode = (e.which) ? e.which : e.keyCode;
if (typeof document.getElementById != 'undefined' && typeof document.all == 'undefined') {
if ((35 < e.charCode && e.charCode < 41)) return false;
if ((35 < chCode && chCode < 41) || chCode == 46) return true;
}
if (!(allow.indexOf(String.fromCharCode(parseInt(chCode))) != -1 || parseInt(chCode) == 8 || parseInt(chCode) == 13 || parseInt(chCode) <= 31))
return false;
return true;
}

UNPIVOT Use ... To read row data into column

SELECT A1.FileName, A1.ClientID, A1.StressName, A2.StressValue
FROM
(SELECT FileName,ClientID,Stress,StressName
FROM
(SELECT FileName,clientid,column5, column6,column7,column8,column9
FROM StressTestReport
Where column4 = 'Base'
) p
UNPIVOT
(StressName FOR Stress IN
(column5, column6,column7,column8,column9)
)AS unpvt) A1,

(SELECT FileName,ClientID,Stressv,StressValue
FROM
(SELECT FileName,clientid,column5, column6,column7,column8,column9
FROM StressTestReport
Where Row_ID IN (Select Row_ID + 1 from StressTestReport Where Column1 = 'Portfolio value:' )
) p
UNPIVOT
(StressValue FOR Stressv IN
(column5, column6,column7,column8,column9)
)AS unpvt)
A2

WHERE A1.clientID = A2.clientID AND A1.fileName = A2.fileName AND A1.Stress = A2.Stressv

Batch file to run sql script

@echo off @cls
@del CheckReport.txt
@del RepOutput.txt
@cls
@@sqlcmd -s \\SQLSERVER -d Mehul -i FileName.sql -o RepOutput.txt
@@exit


-s --> Server Name
-d --> Database Name
-i --> Input File
-o --> Output File (If Required)






Add Webpart In SharePoint Using Console Application

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Publishing;
using Microsoft.SharePoint.WebPartPages;
using System.IO;
using System.Xml;
using System.Web;

using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Security;
using System.Security.Permissions;

namespace ConsoleApplication1
{
class Program
{
[SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
static void Main(string[] args)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("http://siteurlofsharepoint"))
{
using (SPWeb web = site.OpenWeb())
{
try
{
if (HttpContext.Current == null)
{
HttpRequest request = new HttpRequest("", web.Url, "");
HttpContext.Current = new HttpContext(request,
new HttpResponse(new StringWriter()));
HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
}

string dwp = "";
XmlReader xmlReader = null;

SPQuery query = new SPQuery();
query.Query = String.Format("{0}", "Recent_Discussions_.dwp");

SPList webPartGalary = null;

if (web.ParentWeb == null)
{
webPartGalary = web.GetCatalog(SPListTemplateType.WebPartCatalog);
}
else
{
using (SPWeb parentWeb = web.ParentWeb)
{
webPartGalary = parentWeb.GetCatalog(SPListTemplateType.WebPartCatalog);
}
}

SPListItemCollection webparts = webPartGalary.GetItems(query);

if (webparts != null && webparts.Count != 0)
{
Stream xmlStream = webparts[0].File.OpenBinaryStream();
StreamReader sReader = new StreamReader(xmlStream);
StringReader strReader = new StringReader(sReader.ReadToEnd());
xmlReader = XmlReader.Create(strReader);
//dwp = strReader.ToString();
}

//SPWebPartCollection collection = web.GetWebPartCollection("/PageLib/Default.aspx", Storage.Shared);

//collection.Add(dwp);
SPFile file = web.GetFile("http://dub-dev0001:11000/PageLib/Default.aspx");
//file.GetWebPartCollection(Storage.Shared);
SPLimitedWebPartManager manager = file.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
//SPLimitedWebPartManager manager = web.GetLimitedWebPartManager("Default.aspx", System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
string errMsg = string.Empty;
if (HttpContext.Current == null)
{
HttpRequest request = new HttpRequest("", web.Url, "");
HttpContext.Current = new HttpContext(request,
new HttpResponse(new StringWriter()));
HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
}


System.Web.UI.WebControls.WebParts.WebPart wp = (System.Web.UI.WebControls.WebParts.WebPart)manager.ImportWebPart(xmlReader, out errMsg);

manager.AddWebPart(wp, "Left", 1);
manager.SaveChanges(wp);
web.Update();


}
catch (Exception ex)
{ }
}
}
});
}
}
}

Constructor and Destructor

C# Example For Constructor and Destructor:

class ClassA
{
    public ClassA()
    {
        Console.WriteLine("Creating ClassA");
    }
    ~ClassA()
    {
        Console.WriteLine("Destroying ClassA");
    }
}

class ClassB : ClassA
{
    public ClassB()
    {
        Console.WriteLine("Creating ClassB");
    }
    ~ClassB()
    {
        Console.WriteLine("Destroying ClassB");
    }

}
class ClassC : ClassB
{
    public ClassC()
    {
        Console.WriteLine("Creating ClassC");
    }

    ~ClassC()
    {
        Console.WriteLine("Destroying ClassC");
    }
}
class Mehul
{
    public static void Main()
    {
        ClassC c = new ClassC();
        Console.WriteLine("Press enter to Destroy Object");
        Console.ReadLine();
        c = null;
        GC.Collect();
        Console.ReadLine();
    }

}

The Output of above will be:

 

Allow Numbers Only Java Script Code

Add Script in .aspx
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
else
        return true;
}

Write in .cs Page Load
Txt_Number.Attributes.Add("onkeypress", "return isNumberKey(event);");

Create new column using existing columns in table (SQL Server Query)

First, we need to create a column in our table like 'newCol'
then we can use these query to insert data in to newCol using existing one

update tableName set newCol= left(oldCol,1)
It will insert only first left char of existing column into newCol

update tableName set newCol = right(oldCol,(LEN(oldCol)-2))
It will leave first two char from left and insert remainning data into newCol
 
Like this we can manipulate above query with our requirement

Javascript function to validate full name


Call a popup div using JQuery

Step 1: you need to refer this JQuery.js file in your page.

you can download it or refer it or can refer directly from sites.
Step 2: need to create a div in your page inside the html tag (prerfer to create it in bottom).

Step 3: use this JQuery code to call popup div on any object click.