2011-12-20 5 views
0

Я пытаюсь получить все коллекции сайтов под корневым сайтом и отображать их с помощью SPGridView. В SPGridView я использую HyperlinkField для отображения имени, URL-адреса и создания для каждого сайта. Моя проблема в том, что я не могу прикрепить URL-адрес сайта к гиперссылке. Любая идея, как это можно сделать в коде?Как настроить навигацию для гиперссылкиField в SPGridView

[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; 
    } 
+0

Ваш код пропускает важную информацию: Откуда появляется Url? Вы получаете сообщение об ошибке? Является ли '.NavigateUrl' просто пустым, когда вы делаете это по-своему? Что происходит, когда вы устанавливаете '.NavigateUrl' случайный URL-адрес, например google.com? –

+0

Я добавил код выше. –

ответ

0

Вы должны использовать HyperLinkField.DataNavigateUrlFields Property вместо:

HyperLinkField hyplink = new HyperLinkField(); 

hyplink.DataTextField = "Name"; 
hyplink.DataNavigateUrlFields = new string[] { "Url" }; 
hyplink.SortExpression = "Name"; 
hyplink.HeaderText = "Workspaces"; 
grid.Columns.Add(hyplink); 

HyperLinkField.NavigateUrl Property используется для визуализации статических URLs:

Используйте свойство NavigateUrl указать URL для навигации, когда гиперссылкой в объекте HyperLinkField. Когда это свойство установлено, каждая гиперссылка имеет один и тот же URL навигации.

+0

Привет, Стефан. Спасибо за ваш ответ. Это правда, что вы говорите. Я использовал его так: DataNavigateUrlFields = new [] {"Url"}, DataNavigateUrlFormatString = "{0}", –

+0

В соответствии с документом 'DataNavigateUrlFormatString' не требуется для базового отображения. – Stefan

Смежные вопросы