【问题标题】:Dynamically creating a datatable with one column as hyperlinks动态创建一列作为超链接的数据表
【发布时间】:2012-08-01 14:40:01
【问题描述】:

首先:我知道这里已经有一些模糊相似的请求,但没有一个能完整解决我的问题,我正在努力拼凑一个解决方案。

无论如何,我正在编写一个 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>"

我这辈子都不知道如何按照我的意愿动态地做这些事情。您的帮助将不胜感激。谢谢。

【问题讨论】:

    标签: c# asp.net gridview hyperlink datatable


    【解决方案1】:

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

    或者,您可以挂钩到 gridview 上的 OnRowDataBound 事件并在后面的代码中操作值。

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

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

    【讨论】:

    • 由于愚蠢的拼写错误多次失败后,我终于设法让 OnRowDataBound 事件正常工作(以防它不明显:我不完全是专家级程序员)。不过,这并不能完全解决调用另一种方法的问题-我怀疑那里的答案在于以编程方式在带有关联onclick的按钮的列中添加,但是我很累,这个解决方案对于今天来说已经足够了:) 感谢您的快速响应:)
    • @alphasmart 如果您需要关联的 onclick,请查看 commandfield column
    • 虽然我几乎在每一步都在想“必须有更好的方法来做到这一点”,但我终于成功了。再次感谢:)
    猜你喜欢
    • 2017-10-12
    • 2016-05-03
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    相关资源
    最近更新 更多