【问题标题】:How to add a href for a button/link in ASP.NET GridView如何在 ASP.NET GridView 中为按钮/链接添加 href
【发布时间】:2017-07-15 07:49:15
【问题描述】:

我有一个 ASP.NET Web 应用程序,它处理来自其他站点的一些数据并在网格视图中显示信息。我不知道gridview会有多少行,也不知道有多少列。

在这个网格视图中,我有一个模板字段,用于添加复选框。 其余列是使用我绑定到此 gridview 的 DataTable 添加的。现在的问题是,在 10 列之后,我有一个要显示为按钮或链接的 URL。在此链接之后,我有 x nr 列。

如何在具有动态行的 GridView 中添加位于静态列和动态列之间的 URL?

我尝试在 DataTable 中编写一个 href=link..,但它显示为文本。 我发现一篇文章建议使用 HtmlDecode,但要使其正常工作,我需要使用设置 htmlencode = false..或类似内容的boundfields。

有没有办法做到这一点?还是我应该只移动具有复选框的 itemtemplate 中的链接并尝试将其设置在那里?

【问题讨论】:

  • 您能否发布几张您当前视图的图片,也许您希望它看起来像什么?这将有助于澄清很多。
  • 看看你如何绑定数据也会很有帮助
  • 添加了一张图片。最上面的桌子就是我现在所拥有的。底部是我想要的。希望对你有帮助

标签: c# asp.net gridview webforms


【解决方案1】:

您可以为此使用OnRowDataBound。它会将额外的单元格插入到 GridView 中。您还可以将额外的列插入到 DataTable 之前将其绑定到 GridView。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //header
    if (e.Row.RowType == DataControlRowType.Header)
    {
        //add 6 cells
        for (int i = 1; i <= 6; i++)
        {
            TableHeaderCell headerCell = new TableHeaderCell();

            if (i == 6)
            {
                headerCell.Text = "URL";
            }
            else
            {
                headerCell.Text = "Static " + i;
            }

            //add the new cell to the gridview
            e.Row.Cells.AddAt(i, headerCell);
        }
    }

    //normal row
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //cast the current row to a datarowview
        DataRowView row = e.Row.DataItem as DataRowView;

        //add 6 cells
        for (int i = 1; i <= 6; i++)
        {
            TableCell cell = new TableCell();

            if (i == 6)
            {
                cell.Text = string.Format("<a target=\"_blank\" href=\"{0}\">{0}</a>", row["myURL"]);
            }
            else
            {
                cell.Text = "Enter stuff here...";
            }

            //add the new cell to the gridview
            e.Row.Cells.AddAt(i, cell);
        }
    }
}

【讨论】:

  • 我已经按照您的建议完成了,并且该按钮显示在 GridView 中,但是当我单击它时,它消失了。你知道我能做些什么让它不更新表格吗?我猜我应该做一些类似 if(!Page.IsPostBack){..} 的事情,但我不知道我应该把它放在哪里
  • 通过在 OnClientClick() 中添加“return=false”来管理使按钮不回发。有用。谢谢!
  • 我刚刚发现在 RowDataBound 上动态添加的元素只会持续到下一次回发。我的页面上有一些其他按钮,它们不应该回发任何东西。例如,我有一些导出到 excel 的按钮,当我点击它们时,动态添加的按钮就会消失。我能做些什么来阻止这种行为?我需要在 javascript 中移动我的所有按钮吗?如果可以的话,我会在页面加载中移动“添加按钮”部分,这样就不会发生这种情况,但我不能。我需要它来动态。有什么解决办法吗?谢谢!
  • 您需要在每次回发时重新创建动态控件。所以将gridview的绑定移到if (!IsPostBack)外检查。
【解决方案2】:

您可以使用 MatchGrid_RowDataBound 方法查看列并根据需要添加按钮。
下面是如何在 RowDataBound 上添加按钮的示例:

How do I programmatically add a button to a gridview and assign it to a specific code-behind function?

【讨论】:

  • 我尝试在 RowDataBound 中这样做:LinkBut​​ton artLink = new LinkBut​​ton(); artLink.OnClientClick = "window.open('" + currentUrl + "');"; artLink.Text = "查看文章" + e.Row.Cells[3].Text; e.Row.Cells[12].Controls.Add(artLink); //链接显示了,但它只工作一次。点进去之后就消失了
猜你喜欢
  • 2012-02-10
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多