2017-02-24 105 views
2

我有一个ASP.NET web应用程序,用于处理来自其他站点的一些数据并在gridview中显示信息。我不知道gridview将会有多少行,也不知道有多少列。如何在ASP.NET GridView中添加按钮/链接的href

在这个gridview我有一个templatefield,我用来添加一个复选框。 其余列使用绑定到此GridView的DataTable添加。现在的问题是,在10列后,我有一个URL,我想显示为一个按钮或链接。在这个链接之后,我有x nr个列。

如何添加此静态列和动态列之间的静态URL,在动态行的GridView?

我试着在DataTable中写入href = link ..但它将它显示为文本。 我发现了一篇文章,提出了一些与HtmlDecode,但为了这个工作,我需要使用boundfields设置htmlencode = false ..或类似的东西。

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

enter image description here

+0

你能发表一些你当前视图的照片,也许你想看起来像什么?这将有助于澄清很多。 – Cullub

+0

它也将有助于看到你如何绑定数据 –

+0

添加图像。顶级的桌子是我现在拥有的。底部是我想要的。希望它有帮助 – Cosmos24Magic

回答

1

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

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); 
     } 
    } 
} 
+0

我按照你的建议完成了,按钮出现在GridView中,但是当我点击它时,它消失了。你知道我能做什么,以便它不更新表吗?我猜我应该做一些事情,如if(!Page.IsPostBack){..},但我不完全知道我应该把这个 – Cosmos24Magic

+0

管理使按钮不回发加入“返回= false”在的OnClientClick()。有用。谢谢 ! – Cosmos24Magic

+0

我刚刚发现在RowDataBound上动态添加的元素,只能持续到下一个回发。我的网页上还有其他一些按钮,不应该回发任何内容。例如,我有一些导出到excel按钮,当我点击它们时,动态添加的按钮消失。我能做些什么来阻止这种行为?我需要在javascript中移动所有按钮吗?如果可以,我会移动页面加载中的“添加按钮”部分,这样不会发生,但我不能。我需要动态的。任何解决方案谢谢 ! – Cosmos24Magic

2

可以使用MatchGrid_RowDataBound方法过目列,并添加按钮,因为你需要。
这里是如何添加上的RowDataBound按钮的例子:

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

+0

我尝试在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); //链接显示,但它只能运行一次。当我点击它后,它消失 – Cosmos24Magic