如何在SPGridView中设置超链接字段的navigationUrl
我想要获取根网站下的所有网站集并使用SPGridView显示它们。在SPGridView中,我使用HyperlinkField显示名称,网址并为每个网站创建。 我的问题是我无法将该网站的URL附加到HyperlinkField。任何想法如何可以在代码中完成?如何在SPGridView中设置超链接字段的navigationUrl
[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;
}
您应该使用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用于呈现静态URL:
使用NavigateUrl属性来指定网址导航到当一个超链接在HyperLinkField对象中单击。设置此属性时,每个超链接共享相同的导航URL。
嗨Stefan。感谢您的回复。你说的是对的。我用它是这样的:DataNavigateUrlFields = new [] {“Url”}, DataNavigateUrlFormatString =“{0}”, – 2011-12-20 13:29:07
根据文档'DataNavigateUrlFormatString'对于基本显示是不需要的。 – Stefan 2011-12-20 14:18:02
您的代码缺少关键信息:Url来自哪里?你是否收到错误?按照你的方式,'.NavigateUrl'只是空的?当您将'.NavigateUrl'设置为像google.com这样的随机URL时会发生什么? – 2011-12-20 11:35:12
我添加了上面的代码。 – 2011-12-20 11:45:25