In this
article, we will learn how to create a Custom Web Part in SharePoint using
Visual Studio.
After
reading this article, you will learn the following:
Ø
Creating
custom web part using visual studio
Ø
How
to use Labels, Rich text box and Buttons
(with events) and validation
controls in the custom web part?
Ø
How
to validate the fields in custom web part in
SharePoint?
Ø
How
to deploy the web part in SharePoint site?
Scenario:
Suppose
that in a SharePoint page, you want the users to comment about the page or send
some feedback, and then you can use this web part.
Solution:
It is
created the following solution using Visual Studio
2005.
Steps:
1. Open the
Visual Studio -> Click File -> New project -> Select Visual C# from
Project types -> SharePoint -> web Part (Use this link for downloading the Visual Studio Extensions for SharePoint for
creating SharePoint solutions in the Visual Studio 2005)
2. Once created, delete the web part present in the solution named webpart1. Now click on the Project Solution -> Add -> New Item -> SharePoint -> Web Part -> Give the name as CommentWebPart -> Click Add to create a web part file in the project solution
3. Now, we will create controls and add in the web part. See the following code which is used for creating this web part.
2. Once created, delete the web part present in the solution named webpart1. Now click on the Project Solution -> Add -> New Item -> SharePoint -> Web Part -> Give the name as CommentWebPart -> Click Add to create a web part file in the project solution
3. Now, we will create controls and add in the web part. See the following code which is used for creating this web part.
Program.cs:
using System; using System.Runtime.InteropServices; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Serialization; using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; using Microsoft.SharePoint.WebPartPages; namespace CommentWebPart { [Guid("745a216c-1126-4000-a189-02ebc60d7e67")] public class CommentWebPart : System.Web.UI.WebControls.WebParts.WebPart { TextBox txtContactName; TextBox txtEmailAddress; InputFormTextBox txtBox; Button btnSubmit; Button btnCancel; Label lblSpace; public CommentWebPart() { } protected override void CreateChildControls() { try { base.CreateChildControls(); Table t; TableRow tr; TableCell tc; // Creating a table to add the controls in it t = new Table(); // Label for contact name tr = new TableRow(); tc = new TableCell(); tc.Style["padding-top"] = "5px"; tc.VerticalAlign = VerticalAlign.Top; Label lblConatctName = new Label(); lblConatctName.Text = "Conact Name"; tc.Controls.Add(lblConatctName); tr.Controls.Add(tc); // Text box for contact name tc = new TableCell(); tc.VerticalAlign = VerticalAlign.Top; txtContactName = new TextBox(); txtContactName.ID = "txtContactName"; txtContactName.Width = Unit.Pixel(250); tc.Controls.Add(txtContactName); /* Creating required field validator for Contact Name. * If the value is empty, then should throw error on clicking button Submit*/ RequiredFieldValidator objName = new RequiredFieldValidator(); objName.ControlToValidate = "txtContactName"; objName.ErrorMessage = "Conatct Name cannot be empty"; tc.Controls.Add(objName); tr.Controls.Add(tc); t.Controls.Add(tr); // Label for email id tr = new TableRow(); tc = new TableCell(); tc.VerticalAlign = VerticalAlign.Top; Label lblEmailId = new Label(); lblEmailId.Text = "Email ID"; tc.Controls.Add(lblEmailId); tr.Controls.Add(tc); // Text box for email id tc = new TableCell(); tc.VerticalAlign = VerticalAlign.Top; txtEmailAddress = new TextBox(); txtEmailAddress.ID = "txtEmailAddress"; txtEmailAddress.Width = Unit.Pixel(250); tc.Controls.Add(txtEmailAddress); /* Creating required field validator for Email ID. * If the value is empty, then should throw error on clicking button Submit*/ RequiredFieldValidator objEmailID = new RequiredFieldValidator(); objEmailID.ControlToValidate = "txtEmailAddress"; objEmailID.ErrorMessage = "Email Id cannot be left empty"; tc.Controls.Add(objEmailID); tr.Controls.Add(tc); /* Creating Regular Expression validator for Email ID. * If the value is empty or not in a regular Email ID format, * then should throw error on clicking button Submit*/ RegularExpressionValidator objEmail = new RegularExpressionValidator(); objEmail.ControlToValidate = "txtEmailAddress"; objEmail.ErrorMessage = "Email Id is not in the correct format"; objEmail.Display = ValidatorDisplay.Dynamic; objEmail.ValidationExpression = @"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA- Z]\.)+[a-zA-Z]{2,9})$"; tc.Controls.Add(objEmail); tr.Controls.Add(tc); t.Controls.Add(tr); // Label for text box tr = new TableRow(); tc = new TableCell(); tc.VerticalAlign = VerticalAlign.Top; Label lblComments = new Label(); lblComments.Text = "Comments"; tc.Controls.Add(lblComments); tr.Controls.Add(tc); // Creating a rich text box for comments tc=new TableCell(); tc.VerticalAlign=VerticalAlign.Top; txtBox=new InputFormTextBox(); txtBox.ID="txtBox"; txtBox.RichText = true; txtBox.RichTextMode=SPRichTextMode.FullHtml; txtBox.TextMode=TextBoxMode.MultiLine; txtBox.Rows=10; txtBox.Width=Unit.Percentage(100); txtBox.Height = Unit.Percentage(30); tc.Controls.Add(txtBox); tr.Controls.Add(tc); t.Controls.Add(tr); // Creating empty cell for spacing tr = new TableRow(); tc = new TableCell(); lblSpace = new Label(); lblSpace.Text = " "; tc.Controls.Add(lblSpace); tr.Controls.Add(tc); tc = new TableCell(); // Creating button submit event btnSubmit = new Button(); btnSubmit.ID = "btnSubmit"; btnSubmit.Text = "Submit"; btnSubmit.Click +=new EventHandler(btnSubmit_Click); tc.Controls.Add(btnSubmit); // Creating button cancel event btnCancel = new Button(); btnCancel.ID = "btnCancel"; btnCancel.Text = "Cancel"; btnCancel.Click +=new EventHandler(btnCancel_Click); lblSpace = new Label(); lblSpace.Text = " "; tc.Controls.Add(lblSpace); tr.Controls.Add(tc); tc.Controls.Add(btnCancel); tr.Controls.Add(tc); t.Controls.Add(tr); this.Controls.Add(t); } catch (Exception ex) { string err = "Error Occured while loading the web part" + ex.Message; } } protected void btnSubmit_Click(object sender, EventArgs e) { try { // Creating the EMail message System.Text.StringBuilder txtMessage = new System.Text.StringBuilder(); txtMessage.Append("Contact Name: "); txtMessage.AppendLine(txtContactName.Text); txtMessage.Append("Email Address: "); txtMessage.AppendLine(txtEmailAddress.Text); txtMessage.AppendLine(); txtMessage.AppendLine("Comment:"); txtMessage.AppendLine(txtBox.Text); // Creating the Email subject message System.Text.StringBuilder txtsubject = new System.Text.StringBuilder(); txtsubject.Append("Comment from"); txtsubject.Append(txtContactName.Text); // Cerating the message header System.Collections.Specialized.StringDictionary txtmessageHeader = new System.Collections.Specialized.StringDictionary(); // To whom the mail should be sent txtmessageHeader.Add("to", "MAIL ID OF THE USER TO WHOM THE COMMENT HAS TO BE SENT"); // From whom the comment is being sent txtmessageHeader.Add("from", txtEmailAddress.Text); txtmessageHeader.Add("subject", txtsubject.ToString()); txtmessageHeader.Add("content-type", "text/RichText"); // Send the email with the comment from the user Microsoft.SharePoint.Utilities.SPUtility.SendEmail(SPContext.Current.Web, txtmessageHeader, txtMessage.ToString()); // Clear the fields after sending the mail txtContactName.Text = ""; txtEmailAddress.Text = ""; txtBox.Text = ""; } catch (Exception ex) { string str= "Unable to send mail:" + ex.Message; } } protected void btnCancel_Click(object sender, EventArgs e) { // Clear the fields on clicking cancel txtContactName.Text = ""; txtEmailAddress.Text = ""; txtBox.Text = ""; } } }
4. Build
the web part and check for errors.
5. Now, to deploy the solution Right Click on the project
solution -> Select Deploy to add the solutions in the Solution Gallery.
6. Now the
solution will be present in the Solution Gallery
(Central Administration-> Operations -> Solution Management) in the
SharePoint site and we have to add it to our site.
8. Now,
Click on New -> You will see the list of deployed web parts and click on
Comment Web part and then Click Populate Gallery
9. Now the
web part is available in the SharePoint site but we have to add Safe control
entry in the web.config of the site.
Add the following in the web.config in the SAFE CONTROLS tag section
10. Now you
can add the created custom web part in your SharePoint site. This will look as
follows:
According to the required field validation, if the name and email id is field is left empty then the following screen should be seen:
If the Email ID is given in the wrong format then according to the regular expression validation, the following screen should be seen:
If the input fields are correctly given, then you will be able to submit the
According to the required field validation, if the name and email id is field is left empty then the following screen should be seen:
If the Email ID is given in the wrong format then according to the regular expression validation, the following screen should be seen:
If the input fields are correctly given, then you will be able to submit the
Also, to know about the Basics of Visual Web Part read this article.
To know about Creating and Deploying a Visual Web Part
using Visual Studio 2010 read this article.
Please free to share your thoughts and share this post if this helps you!