【问题标题】:Link in a DataRow (Datatable)链接到 DataRow(数据表)
【发布时间】:2011-05-05 18:33:35
【问题描述】:

我正在动态构建一个 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>

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

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

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

【问题讨论】:

  • 请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。

标签: c# gridview datatable datarow


【解决方案1】:

抱歉忽略...我没有看到动态表约束 为什么要在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”不是已知元素。你确定它在使用网格视图吗?
  • 它在gridview中的模板字段,它是数据网格中的模板列
  • 有效,但仅适用于第一列,而且由于我不知道我将拥有多少列,所以我不知道它是否有效?
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 是的,这就是我们所需要的。并且实际上在 GridView 中有一个 BoundField&lt;asp:BoundField DataField="URL" HtmlEncode="false" HeaderText="URL" HeaderStyle-Wrap="false" SortExpression="URL"&gt; &lt;ItemStyle Width="25% /&gt; &lt;/asp:BoundField&gt;
    【解决方案4】:

    很久没有人问这个问题了,但我是第一个谷歌搜索结果之一,所以我想告诉你,我已经解决了这个问题,添加了一个“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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      相关资源
      最近更新 更多