2012-08-01 46 views
2

首先:我知道这里已经有一些模糊的类似请求,但没有一个能完全解决我的问题,而且我在智慧的最后尝试着拼凑一个解决方案。动态创建一列数据表作为超链接

无论如何,所以我正在编写Web界面以从RESTful API获取一些信息。我生成一个数据表,我通过这样的gridview显示:

DataTable table = new DataTable(); 
table.Columns.Add("entry name"); 
table.Columns.Add("col1"); 
table.Columns.Add("col2"); 
table.Columns.Add("etc"); 

foreach(string name in GetNames()) 
{ 
    DataRow row = table.NewRow(); 
    row["name"] = name; 
    row["col1"] = SomeMethod(name); 
    row["col2"] = SomeOtherMethod(name); 
    row["etc"] = YouGetTheIdea(name); 
    table.Rows.Add(row); 
} 

GridView1.DataSource = table; 
GridView1.DataBind(); 

到目前为止很好。我真正喜欢的是“名称”列是超链接,这样他们可以调用名称作为参数的方法;或者链接到一个网站,名称为URL,即这样的一部分:

"<a href:'www.example.com/" + name + ".csv'>" + name + "</a>" 

我不能为我的生活弄清楚如何动态地,因为我想去做这些事情。您的帮助将不胜感激。谢谢。

回答

0

一种解决方案是将列值设为URL,然后对于绑定列设置HtmlEncode = false。这意味着,在你的foreach你会做一些像row['link'] = "<a href='..'>..</a>"。当这个绑定时,它应该输出为HTML。

或者,您可以钩入GridView上的OnRowDataBound事件并在后面的代码中操纵值。

或者,最后,你可以创建结合适当一个ItemTemplate柱:

<asp:TemplateField HeaderText="Seniority"> 
    <ItemTemplate> 
     <a href='example.com/<%# Eval("name")) %>'><%# Eval("name")) %></a> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

未能由于愚蠢的错别字几次之后,我终于设法得到OnRowDataBound事件工作(如果这不是明显的:我我不是一个专家程序员)。这不太适用于调用另一种方法 - 我怀疑答案就在于通过编程添加按钮和相关的onclick列,但我很累,这个解决方案对于今天来说已经足够了:)感谢您的快速响应:) – alphasmart 2012-08-01 16:27:13

+0

@alphasmart如果您需要关联的onclick,请查看[commandfield专栏](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.commandfield.aspx)。 – Prescott 2012-08-01 16:31:00

+0

虽然我几乎在每一步都想着“这样做一定有更好的方法”,但我终于明白了这一点。再次感谢 :) – alphasmart 2012-08-02 11:14:54