Membuat Web Part dan menggunakan User Controls
Waktu MSDN day ada yang tanya salah satu user ke Sagi apakah harus membuat Web Part tapi kudu harus draw semua nya di web part tersebut. Bagimana bila di page itu cukup rumit dan banyak tampilan design yang di perlukan. Memang waktu itu saya rasa sich pertanyaan itu belum terjawab jadi saya coba jawab disini
bahwa Web Part tersebut bisa kita lakukan konektivitas dengan user control kita yang ada sehingga kita bisa dengan mudah melakukan pembuataan design pada user control kita dan Web part hanya meload user Control itu saja.
Coding nya sbb :
using System;
using System.ComponentModel;
using System.Text;
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.Utilities;
using Microsoft.SharePoint.WebPartPages;
namespace Dms.WebPartLib
{
public class wpGeneralPart : Microsoft.SharePoint.WebPartPages.WebPart
{
private Control _childControl = null;
private string _userControlVirtualPath = "usercontrols/demo.ascx";
private string _errMessage= string.Empty;
public wpGeneralPart()
{ }
[
Personalizable(),
Category("Miscellaneous"),
DefaultValue(""),
WebBrowsable(true),
WebDisplayName("User Control Virtual Path"),
WebDescription("User Control Virtual Path")
]
protected override void RenderWebPart(HtmlTextWriter output)
{
if (_errMessage != string.Empty) output.Write(_errMessage);
if (_userControlVirtualPath != string.Empty || _userControlVirtualPath.Equals("") == false) RenderChildren(output);
}
protected override void RenderChildren(HtmlTextWriter output)
{
try
{
this.EnsureChildControls();
if (this._childControl != null)
this._childControl.RenderControl(output);
}
catch (Exception ex)
{
_errMessage = string.Format("Exception Message (RenderWebPart) = {0}<br />", ex.Message);
}
}
protected override void CreateChildControls()
{
try
{
base.CreateChildControls();
if (_userControlVirtualPath != string.Empty)
{
if (_childControl != null) return;
_childControl = Page.LoadControl(_userControlVirtualPath);
if (_childControl!=null)
Controls.AddAt(0, _childControl);
}
/* pada bagian ini ada code load page.LoadControl inilah code untuk menload user control yang ada */
}
catch (Exception ex)
{
//_errMessage = string.Format("Exception Message (CreateChildControls) = {0}<br />", ex.Message);
}
}
}
}
Nah Webpart akan menload user control demo.ascx, jadi pastikan pathnya benar dan user control dapat bisa di akses.