动态创建一个数据表,其中一列作为超链接

时间:2012-08-01 14:40:01

标签: c# asp.net gridview hyperlink datatable

首先关闭:我知道这里已经有一些模糊的类似请求了,但是没有一个能够完全解决我的问题,而且我最终试图拼凑出一个解决方案。

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

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>"

我不能为我的生活弄清楚如何动态地按照我的意愿做这些事情。非常感谢您的帮助。感谢。

1 个答案:

答案 0 :(得分: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>