Monday, December 28, 2009

Sharepoint Object Model Programming #3

Connectable Web Part - ConnectionProvider & ConnectionConsumer Web Part


In This Example we will create connectable webparts ,where one webpart will work as a provider which will provide data to Consumer webpart.Lets take an example , suppose we have two list Master & Details. Each record in details list will have an reference to master list item.Details List have an column 'MasterId' which will take value from master list 'ID' column.We will create two webpart(provider & consumer), Provider webpart will show Master List's record (Title field) in a dropdown list ,when user select any value in dropdown the Consumer webpart will show all the records from detail list which have selected MasterId.


Assembly References
• Windows SharePoint Services
• System.Web

Class Library References
• Microsoft.SharePoint
• System.Web
• System.Web.UI.WebControls;
• System.Web.UI.WebControls.WebParts;

Code

Interface
namespace MasterDetail
{
public interface IInfoProvider
{
string MasterId
{ get; }
}
}

Provider WebPart
namespace MasterDetail
{
public class InfoProviderWP : WebPart, IInfoProvider
{
DropDownList drpMaster = new DropDownList();

public ProjectInfoProviderWP()
{
SPWeb web = SPControl.GetContextWeb(Context);
SPQuery query = new SPQuery();
SPList masterList = web.Lists[“MasterListName”];
drpMaster.DataValueField = "ID";
drpMaster.DataTextField = "Title";
drpMaster.DataSource = masterList.GetItems(query).GetDataTable();
drpMaster.DataBind();
}

public string MasterId
{
get
{
return this. drpMaster.SelectedItem.Value;
}
}

protected override void CreateChildControls()
{
base.CreateChildControls();
Table tbl = new Table();
TableRow tr = new TableRow();
TableCell td = new TableCell();
td.Text = "Select Master : ";
td.Font.Bold = true;
tr.Controls.Add(td);
td = new TableCell();
drpMaster.AutoPostBack = true;
td.Controls.Add(drpMaster);
tr.Controls.Add(td);
tbl.Controls.Add(tr);
}

[ConnectionProvider("Info Provider")]
public IInfoProvider ConnectionInterface()
{
return this;
}

}
}

Consumer Webpart
namespace MasterDetail
{
public class ConsumerWP : WebPart
{
IInfoProvider myProviderInterface = null;
GridView gridDetails = new GridView();

[ConnectionConsumer("Info Provider")]
public void GetInterface(IInfoProvider providerInterface)
{
myProviderInterface = providerInterface;
}

protected override void CreateChildControls()
{
base.CreateChildControls();
this.Controls.Add(gridDetails);
}

protected override void OnPreRender(EventArgs e)
{
if (this.myProviderInterface != null)
{
BindData();
}
base.OnPreRender(e);
}

private void BindData()
{
string masterId = myProviderInterface.MasterId;
SPWeb web = SPControl.GetContextWeb(Context);
SPQuery query = new SPQuery();
SPList detailList = web.Lists[“DetailListName”];
query.Query = "<Where><Eq><FieldRef Name='MasterID'/><Value Type='Text'>" + masterId + "</Value></Eq></Where>";
gridDetails.DataSource = detailList.GetItems(query).GetDataTable();
gridDetails.DataBind();
}
}
}



More - Sharepoint Object Model Programming

No comments: