как установить navigationUrl гиперссылки в SPGridView - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь получить все семейства сайтов под корневым сайтом и отобразить их с помощью 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;
    }

1 Ответ

0 голосов
/ 20 декабря 2011

Вместо этого следует использовать свойство HyperLinkField.DataNavigateUrlFields :

HyperLinkField hyplink = new HyperLinkField();

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

Свойство HyperLinkField.NavigateUrl используется для отображения статических URL-адресов:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...