Я пытаюсь получить все семейства сайтов под корневым сайтом и отобразить их с помощью SPGridView. В SPGridView я использую HyperlinkField для отображения имени, URL и созданного для каждого сайта.
Моя проблема заключается в том, что я не могу прикрепить URL-адрес сайта к HyperlinkField. Есть идеи, как это можно сделать в коде?
[ToolboxItemAttribute(false)]
public class SPGridViewDemo : WebPart
{
private SPGridView grid;
private ObjectDataSource gridDS;
public DataTable SelectData()
{
DataTable dataSource = new DataTable();
dataSource.Columns.Add("Name");
dataSource.Columns.Add("Created");
dataSource.Columns.Add("Url");
SPWebApplication webApplication = SPContext.Current.Site.WebApplication;
SPSiteCollection siteCollections = webApplication.Sites;
SPSite currentSite = SPContext.Current.Site;
foreach (SPSite siteCollection in siteCollections)
{
dataSource.Rows.Add(siteCollection.RootWeb.Title, siteCollection.RootWeb.Created, siteCollection.RootWeb.Url);
}
return dataSource;
}
protected sealed override void Render(HtmlTextWriter writer)
{
BoundField column = new BoundField();
HyperLinkField hyplink = new HyperLinkField();
hyplink.DataTextField = "Name";
hyplink.NavigateUrl = "Url";
hyplink.SortExpression = "Name";
hyplink.HeaderText = "Workspaces";
grid.Columns.Add(hyplink);
column = new BoundField();
column.DataField = "Created";
column.SortExpression = "Created";
column.HeaderText = "Created";
grid.Columns.Add(column);
column = new BoundField();
column.DataField = "Url";
column.SortExpression = "Url";
column.HeaderText = "Url";
grid.Columns.Add(column);
grid.Sort("Name",System.Web.UI.WebControls.SortDirection.Descending);
grid.DataBind();
base.Render(writer);
}
protected sealed override void CreateChildControls()
{
const string gridId = "grid";
const string dataSourceId = "gridDS";
gridDS = new ObjectDataSource();
gridDS.ID = dataSourceId;
gridDS.SelectMethod = "SelectData";
gridDS.TypeName = this.GetType().AssemblyQualifiedName;
gridDS.ObjectCreating += new ObjectDataSourceObjectEventHandler(gridDS_ObjectCreating);
this.Controls.Add(gridDS);
grid = new SPGridView();
grid.ID = gridId;
grid.DataSourceID = gridDS.ID;
grid.AutoGenerateColumns = false;
// Paging
grid.AllowPaging = true;
grid.PageSize = 5;
// Sorting
grid.AllowSorting = true;
this.Controls.Add(grid);
SPGridViewPager pager = new SPGridViewPager();
pager.GridViewId = grid.ID;
this.Controls.Add(pager);
}
private void gridDS_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
e.ObjectInstance = this;
}