How to Attach an Event Receiver to a SharePoint List on Feature Activation

Sathish Nadarajan
 
Solution Architect
December 14, 2015
 
Rate this article
 
Views
12385

For a very long time, I have been thinking to write this particular function. Here, there are two methods we can use. Either the Elements.xml or with the CS. I always believe in C Sharp, rather than the Elements File. Hence, I have come up with a Generic Method which will delete the event receiver and attach the event receiver to the List.

The Code snippet is self-explanatory and does not require much explanation.

 private static void AttachEventReceiver(SPWeb web,string listName,string eventClassName,string eventName,int sequenceNumber,string eventReceiverType)
         {
             SPList list = web.Lists[listName];
             if (list != null)
             {
                 SPEventReceiverDefinition eventReceiverDefinitionToDelete = null;
 
                 foreach (SPEventReceiverDefinition eventReceiverDefinition in list.EventReceivers)
                 {
                     if (eventReceiverDefinition.Class == eventClassName)
                     {
                         eventReceiverDefinitionToDelete = eventReceiverDefinition;
                         break;
                     }
                 }
 
                 if (eventReceiverDefinitionToDelete != null)
                 {
                     eventReceiverDefinitionToDelete.Delete();
                     list.Update();
                 }
 
                 SPEventReceiverDefinition workflowStatusUpdatedEventDefinition = list.EventReceivers.Add();
                 workflowStatusUpdatedEventDefinition.Assembly = System.Reflection.Assembly.GetExecutingAssembly().FullName;
                 workflowStatusUpdatedEventDefinition.Class = eventClassName;
                 workflowStatusUpdatedEventDefinition.SequenceNumber = sequenceNumber;
                 workflowStatusUpdatedEventDefinition.Name = eventName;
                 switch (eventReceiverType)
                 {
                     case "ItemUpdated":
                         workflowStatusUpdatedEventDefinition.Type = SPEventReceiverType.ItemUpdated ;
                         break;
                     case "CheckIn":
                         workflowStatusUpdatedEventDefinition.Type = SPEventReceiverType.ItemCheckedIn;
                         break;
                     case "ItemDeleting":
                         workflowStatusUpdatedEventDefinition.Type = SPEventReceiverType.ItemDeleting;
                         break;
                     default:
                         break;
                 }
                 
                 workflowStatusUpdatedEventDefinition.HostId = list.ID;
                 workflowStatusUpdatedEventDefinition.HostType = SPEventHostType.List;
                 workflowStatusUpdatedEventDefinition.Update();
                 list.Update();
 
             }
         }
 
 private static void DeleteEventReceiver(SPWeb web,string listName, string eventClassName)
         {
             SPList pagesList = web.Lists[listName];
 
             if (pagesList != null)
             {
                 SPEventReceiverDefinition eventReceiverDefinitionToDelete = null;
 
                 foreach (SPEventReceiverDefinition er in pagesList.EventReceivers)
                 {
                     if (er.Class == eventClassName)
                     {
                         eventReceiverDefinitionToDelete = er;
                         break;
                     }
                 }
 
                 if (eventReceiverDefinitionToDelete != null)
                 {
                     eventReceiverDefinitionToDelete.Delete();
                     pagesList.Update();
                 }
             }
         }
 

And the Sample Call to these methods are as follows.

 public override void FeatureActivated(SPFeatureReceiverProperties properties)
         {
             
             SPSite site = (SPSite)properties.Feature.Parent;
             SPWeb web = site.RootWeb;
             SPWeb confidentialWeb = site.AllWebs[SiteVariables.SITE_CONFIDENTIAL];
             AttachEventReceiver(web, "Pages", "EventReceiver Assembly Name", "Event Name", 1000, "CheckIn");
             
         }
 public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
         {
 
             SPSite site = (SPSite)properties.Feature.Parent;
             SPWeb web = site.RootWeb;
             SPWeb confidentialWeb = site.AllWebs[SiteVariables.SITE_CONFIDENTIAL];
             DeleteEventReceiver(web,"Pages"," EventReceiver Assembly Name ");
  
         }
 

Hope this snippet is useful.

Happy Coding,

Sathish Nadarajan.

Author Info

Sathish Nadarajan
 
Solution Architect
 
Rate this article
 
Sathish is a Microsoft MVP for SharePoint (Office Servers and Services) having 15+ years of experience in Microsoft Technologies. He holds a Masters Degree in Computer Aided Design and Business ...read more
 

Grab UserControl custom event in a Winform

Tarun Kumar Chatterjee
 
Net – Technology Specialist
October 20, 2015
 
Rate this article
 
Views
10806

In windows form application we can invoke UserControl ‘s method from its parent Win form or in reverse from UserControl we can invoke its parent Win Form method.

But in one of our requirement, it was told that all the eventhandler should be in the main form instead of individual usercontrol. And then we created a custom event to avoid the direct dependency. Thought of sharing with you in simple way. Let see how it is:

Here are the details steps I followed :

1. Create a blank Win application solution and it has a default form named as “Form1”.

2. Add a Panel control named as “pnlTest” in “Form1”.

3. Within the Panel taken a button control named as “btnShow” and a label control named as “lblTest”

4. Now, create an UserControl named as “ucTest”

5. Within the UserControl have taken a Tab Control it has 3 TabPages named as “tabPage1”, “tabPage2”, “tabPage3” and one button control “btnCustomEvent”

6. In the user control I have created a method to show the tabs

clip_image002

Below is the code snippet how we are invoking the UserControl method from Win form in btnShow_Click event

clip_image004

In win form I have created below method to display the text coming from UserControl

clip_image006

Now here is the code to invoke the above Win form method from a UserControl

clip_image008

Now, creating a custom event in UserControl and bubble up the event in Win form

clip_image010

In winform Form1_Load we need to register the UserControl event, the code is as follows:

clip_image011

clip_image013

Now Clicking on “Custom Event to Hide Tab Pages” will first call UserControl _ButtonClick custom event which is in main Win form.

Hope this artifact helps us to understand about to fetch/invoke the values from UserControl and how to bubble up a custom event. Let me come up something more in next articles.

Happy coding J

With regards,

Tarun Kumar Chatterjee

Category : .Net

Author Info

Tarun Kumar Chatterjee
 
Net – Technology Specialist
 
Rate this article
 
Tarun has been working in IT Industry for over 12+ years. He holds a B-tech degree. He is passionate about learning and sharing the tricks and tips in Azure, .Net ...read more
 

Leave a comment