【问题标题】:Add a hyperlink to a datatable / gridview向数据表/网格视图添加超链接
【发布时间】:2012-03-21 21:27:43
【问题描述】:

我确定以前有人问过这个问题,但我找不到合适的答案。

我正在动态创建一个数据表并使用它来填充 Web 控件网格视图...

我想知道是否或如何将 1 列 (URL) 更改为超链接?

我创建数据表的代码:

private DataTable CreateDataTable()
{
    DataTable myDataTable = new DataTable();
    DataColumn myDataColumn;

    myDataColumn = new DataColumn();
    myDataColumn.DataType = Type.GetType("System.String");
    myDataColumn.ColumnName = "Title";
    myDataTable.Columns.Add(myDataColumn);

    myDataColumn = new DataColumn();
    myDataColumn.DataType = Type.GetType("System.String");
    myDataColumn.ColumnName = "URL";

    myDataTable.Columns.Add(myDataColumn);
.
.
.
}

我添加到数据表如下:

private void AddDataToTable(string title, string strLink......
        {
            DataRow row = myTable.NewRow();
            row["Title"] = title;
            row["URL"] = strLink;
            .
            .
            .

然后将数据表绑定到gridview:

datagrid.DataSource = ((DataTable)Session["myDatatable"]).DefaultView;

datagrid.DataBind();

【问题讨论】:

标签: c# asp.net gridview


【解决方案1】:

您不会在 Datatable 中执行此操作 - 这只是数据的内存表示。它不包含有关网格视图中列类型的任何信息。

一旦它在 DataGridView 中,只需将列类型设置为 DataGridViewLinkColumn

【讨论】:

  • 哦,那就试试this吧。
【解决方案2】:

你可以的

row["URL"] = "<a href='www.*.com'>Stack Overflow</a>";

但是你应该在你的GridView上使用一个BoundField,并设置HtmlEncode="false"

<asp:BoundField DataField="URL" HtmlEncode="false" HeaderText="URL" HeaderStyle-Wrap="false" SortExpression="URL">
    <ItemStyle Width="25% />
</asp:BoundField>

【讨论】:

    【解决方案3】:

    当你绑定到gridview或Detail view时,你可以在url列(模板字段)添加超链接控件并设置

    NavigateUrl='<%# Eval("URL")%>'
    

    如果你想导航到另一个网站,比如谷歌,设置

    NavigateUrl='<%# String.Format("http://{0}", Eval("URL")) %>'
    

    ... :)

    【讨论】:

    • 我没有在 asp 中定义 gridview 的列,因为它们发生了变化,并且 gridview 正在代码中构建...
    • @Standage 我不太确定你在说什么。如果我错了,请纠正我,如果您使用 Visual Studio 向导将数据绑定到网格视图,向导将自动创建绑定字段。但是,您可以将该绑定字段转换为模板字段,然后您可以将超链接控件添加到该模板字段中。
    • 我没有使用 Visual Studio 向导将数据绑定到网格视图,而是在代码中创建具有上述内容的数据表,然后将其设置为网格视图数据源。
    • 你的意思是你没有在Gridview中使用Itemtemplate?你想在Datatable中设置?