DataRow中的链接(数据表)

时间:2010-11-05 18:41:54

标签: c# gridview datatable datarow

我正在动态构建一个DataTable,我正在尝试在DataRow中添加一个“链接”,我将其添加到DataTable中。 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>

但是当我将它绑定到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个coloumns“col”......

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

4 个答案:

答案 0 :(得分:1)

如果要从查询中返回html代码,只需在boundfield上使用htmlEncode=False即可。还要在gridview上设置AutoGenerateColumns =“false”,这就是你在gridview上获得双列的原因。

答案 1 :(得分:1)

自从问到这个问题已经有很长一段时间了,但我到这里是第一个谷歌搜索结果之一,所以我想告诉你我已经解决了这个问题,并添加了一个&#34; HyperLinkField&#34 ;:

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

答案 2 :(得分: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>

答案 3 :(得分:0)

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

您将可以访问表的行元素(DataItem),并且可以根据需要对其进行解析并格式化网格行。

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

修改:由于您拥有AutoGenerateColumns="true"以及该列的模板,您将获得重复的列。