将控件添加到Gridview单元格

时间:2013-10-29 13:25:33

标签: c# asp.net gridview dynamic-controls rowdatabound

我想在某些条件下在GridView单元格上添加一个按钮。 我在RowDatabound事件中执行了以下操作

if( i==0)
{
   Button btn= new Button();
   btn.Text = "view more";        
   e.Row.Cells[7].Controls.Add(btn);
}

执行此操作时,绑定的单元格中的文本将丢失,仅显示按钮。 我需要将按钮和单元格文本一起出现。

有人可以帮我这样做吗? 在此先感谢

3 个答案:

答案 0 :(得分:5)

当您将控件添加到单元格中时,它会胜过单元格中的文本,并且只想显示控件。

然而,您可以同时拥有文本和按钮,同时保持它们分开。为此,您需要以标签的形式添加另一个控件:

Label myLabel = new Label();
myLabel.Text = e.Row.Cells[7].Text; //might want to add a space on the end of the Text
e.Row.Cells[7].Controls.Add(myLabel);

LinkButton myLinkButton = new LinkButton();
myLinkButton.Text = "view more";
e.Row.Cells[7].Controls.Add(myLinkButton);

答案 1 :(得分:3)

它是一种解决方法,检查它是否对您有所帮助

如果符合您的要求,您可以将现有的BoundColumn转换为Linkbuton

if( i==0)
{
    LinkButton lnkbtn = new LinkButton();
    lnkbtn.Text = e.Row.Cells[7].Text;
   // Create a command button and link it to your id    
   // lnkbtn.CommandArgument = e.Row.Cells[0].Text; --Your Id 
   // lnkbtn.CommandName = "NumClick";
   // btn.Text = "view more";        
    e.Row.Cells[7].Controls.Add(lnkbtn);
}

答案 2 :(得分:2)

您必须在每次回发时重新创建所有动态控件。但只有在网格获得数据绑定时才会执行RowDataBound。所以这不是正确的方法。

如果这只是一个按钮,您应该以声明方式将其添加到TemplateField中的aspx。然后,您可以在RowDataBound

中切换可见性

Tutorial 12: Using TemplateFields in the GridView Control

 Button btn = (Button)e.Row.FindControl("ButtonID");
 btn.Visible = i==0;

您可以为“查看更多内容”处理Click的{​​{1}}事件。