C# 动态创建一列为超链接的数据表

C# 动态创建一列为超链接的数据表,c#,asp.net,gridview,hyperlink,datatable,C#,Asp.net,Gridview,Hyperlink,Datatable,首先:我知道这里已经有一些模糊不清的类似要求,但没有一个能完全解决我的问题,我也在绞尽脑汁试图拼凑出一个解决方案 无论如何,我正在编写一个web界面,以从RESTful API获取一些信息。我正在生成一个datatable,通过gridview显示,如下所示: DataTable table = new DataTable(); table.Columns.Add("entry name"); table.Columns.Add("col1"); table.Columns.Add("col2"

首先:我知道这里已经有一些模糊不清的类似要求,但没有一个能完全解决我的问题,我也在绞尽脑汁试图拼凑出一个解决方案

无论如何,我正在编写一个web界面,以从RESTful API获取一些信息。我正在生成一个datatable,通过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();
"<a href:'www.example.com/" + name + ".csv'>" + name + "</a>"
到目前为止还不错。我真正希望的是“name”列是超链接,这样它们可以调用一个以名称作为参数的方法;或链接到网站,名称作为URL的一部分,如:

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();
"<a href:'www.example.com/" + name + ".csv'>" + name + "</a>"
“”

我一辈子都搞不懂如何像我想的那样动态地做这些事情。非常感谢你的帮助。谢谢。

一种解决方案是将列值设置为URL,然后对于绑定列,将
HtmlEncode=false设置为
。这意味着,在您的
foreach
中,您将执行类似于
行['link']=''
的操作。当绑定时,它应该输出为HTML

或者,您可以挂接gridview上的OnRowDataBound事件,并操纵代码隐藏中的值

或者,最后,您可以创建一个适当绑定的ItemTemplate列:

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

一种解决方案是将列值设置为URL,然后对于绑定列,设置
HtmlEncode=false
。这意味着,在您的
foreach
中,您将执行类似于
行['link']=''
的操作。当绑定时,它应该输出为HTML

或者,您可以挂接gridview上的OnRowDataBound事件,并操纵代码隐藏中的值

或者,最后,您可以创建一个适当绑定的ItemTemplate列:

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


在由于愚蠢的打字错误而失败了几次之后,我终于设法让OnRowDataBound事件正常工作了(如果不明显:我并不是一个专业的程序员)。不过,这并不能完全处理调用另一个方法的问题-我怀疑答案在于通过编程方式将button添加到一个列中,该列带有关联的onclick,但是我累了,这个解决方案今天已经足够好了:)感谢您的快速响应:)@alphasmart如果您需要相关的onclick,请查看。当我在想“一定有更好的方法”时,几乎每一步,我最终都能做到这一点。再次感谢:)在由于愚蠢的拼写错误而失败了几次之后,我终于设法让OnRowDataBound事件正常工作了(如果不明显的话:我不是一个真正的程序员)。不过,这并不能完全处理调用另一个方法的问题-我怀疑答案在于通过编程方式将button添加到一个列中,该列带有关联的onclick,但是我累了,这个解决方案今天已经足够好了:)感谢您的快速响应:)@alphasmart如果您需要相关的onclick,请查看。当我在想“一定有更好的方法”时,几乎每一步,我最终都能做到这一点。再次感谢:)