数据行(Datatable)中的链接

3

我正在动态构建一个DataTable,我想在我添加到DataTable中的DataRow(s)中添加一个“链接”。在创建后,将该 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时,列中的HTML被编码了。 有没有办法在那里添加一个HyperLink对象或类似的东西?

P.S. 这不是示例中的内容,但这些列是动态添加的(这意味着在渲染之前我不知道会有多少列)

更新#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进行编码。


请不要在问题标题中包含有关所使用编程语言的信息,除非没有它就没有意义。标签可以起到这个作用。 - Ondrej Janacek
4个回答

1
如果您从查询中返回html代码,请在绑定字段上使用htmlEncode=False。同时,在GridView上设置AutoGenerateColumns="false",这就是为什么您在GridView上获得了双列的原因。

没错,这就是所需的全部内容。而要在GridView中实际拥有一个BoundField<asp:BoundField DataField="URL" HtmlEncode="false" HeaderText="URL" HeaderStyle-Wrap="false" SortExpression="URL"> <ItemStyle Width="25% /> </asp:BoundField> - vapcguy

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();

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>

我收到“templatecolumn”不是已知元素的错误提示。您确定它能与网格视图一起使用吗? - tink01
它是GridView中的模板字段,而在DataGrid中则是模板列。 - Kirit Chandran
<asp:TemplateField HeaderText="X"> <ItemTemplate> </ItemTemplate></asp:TemplateField> - Kirit Chandran
它能工作,但仅适用于第一列,而且由于我不知道会有多少列,所以我不知道它是否可行? - tink01

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接