2

我正在动态构建一个 DataTable,并尝试在要添加到 DataTable 的 DataRow 中添加一个“链接”。DataTable 在创建后绑定到 GridView。

类似的东西:

   DataTable dataTable = new DataTable();
   foreach (Item item in items)
    {
        DataRow row = dataTable.NewRow();
        dataTable.Columns.Add(new DataColumn("col"));

        row["col"] = "<a href='http://www.google.com'>Link here</a>";

        dataTable.Rows.Add(row);

    }

然后我将它绑定到 GridView :

        <asp:GridView ID="grdView" Runat="server" border="0" EnableViewState="true" style="width:100%;"
            AutoGenerateColumns="true" AllowPaging="false" PagerSettings-Visible="false" 
            ShowHeader="true" ShowFooter="true" CellPadding="0" CellSpacing="0"
            Visible="True">
        </asp:GridView>

但是当我将列中的 HTML 绑定到 GridView 时,它会被编码。有没有办法在那里添加一个超链接对象或类似的东西?

PS 示例中没有,但列是动态添加的(这意味着在渲染之前我不知道我将拥有多少列)

更新#1

创建列时,我可以访问 GridView。我能够做这样的事情:

    dataTable.Columns.Add(new DataColumn("col"));

    BoundField bf = new BoundField();
    bf.HtmlEncode = false;
    bf.DataField = "col";
    grd.Columns.Add(bf);

   row["col"] = "<a href='http://www.google.com'>Link here</a>";

但它显示 2 列“col”...

更新#3: 我改用了 DataGrid。在数据行中插入“纯文本”时,它不会对 HTML 进行编码。

4

4 回答 4

1

如果您从查询中返回 html 代码,只需htmlEncode=False在您的 boundfield 上使用。还要在您的网格视图上设置 AutoGenerateColumns="false",这就是您在网格视图上获得双列的原因。

于 2013-11-01T16:22:30.127 回答
1

自从被问到这个问题已经很长时间了,但我来到这里是第一个谷歌结果之一,所以我想告诉你,我已经解决了这个问题,添加了一个“HyperLinkField”:

HyperLinkField myLink = new HyperLinkField();
myLink.HeaderText = "Link Here";
myLink.DataTextField = "Click here";
myLink.DataNavigateUrlFields = new string[] { "field1", "field2", "field3" };
myLink.DataNavigateUrlFormatString = "NewPage.aspx?id={0}&otherId={1}&otherId2={2}";

myGridView.Columns.Add(myLink);

//Finally bind the data...
myGridView.DataBind();
于 2014-10-07T10:41:37.917 回答
0

GridView 有一个 GridView_RowDataBound 事件,它允许您将控件动态注入行、格式化内容等。

您将可以访问表的行元素 (DataItem),并能够根据需要解析该元素并格式化网格行。

有关一个很好的介绍示例,请参见:http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx ?ppud=4

编辑:您将获得重复的列,因为您拥有AutoGenerateColumns="true"该列的模板以及该列的模板。

于 2010-11-05T20:19:48.390 回答
0

抱歉忽略...我没有看到动态表约束为什么要在GridView中添加一个模板列,然后添加一个超链接。抱歉,此代码在此空间中的格式似乎不正确

    <asp:TemplateColumn>                                                                        <ItemTemplate>
<asp:HyperLink runat="server" ID="hypLink" Text="test" Target='<%# DataBinder.Eval(Container.DataItem, "moved_ref_amt").ToString() %>'></asp:HyperLink>                                                                        </ItemTemplate>                                                                            </asp:TemplateColumn>
于 2010-11-05T19:01:29.917 回答