首页 文章

DataRow中的链接(数据表)

提问于
浏览
2

我正在动态构建一个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对象或类似的东西?

附:它不是在示例中,而是动态添加列(这意味着我在渲染之前不知道我将拥有多少列)

UPDATE #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”...

UPDATE #3 : 我使用的是DataGrid . 在数据行中插入"plain text"时,它不对HTML进行编码 .

4 回答

  • 1

    如果要从查询中返回html代码,只需在boundfield上使用 htmlEncode=False . 在gridview上设置AutoGenerateColumns = "false",'s why you'在gridview上获得双列 .

  • 0

    已经有很长一段时间了,但是我来到这里是第一个google结果之一,所以我想告诉你我已经解决了这个问题,添加了一个“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>
    
  • 1

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

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

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

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

相关问题