2015-12-10 172 views
2

我正在动态生成gridview。下面是代码动态添加超链接到gridview

设计规范

<asp:GridView Width="100%" CssClass="TTable" ID="MainGridView" OnDataBound = "OnDataBound" runat="server" AutoGenerateColumns="False" onrowdatabound="GridView_RowDataBound"> 
      <Columns> 
      </Columns> 
</asp:GridView> 

代码背后:

private void createGridView(DataTable gridviewdt) 
    { 
     MainGridView.Columns.Clear(); 
     //Iterate through the columns of the datatable to set the data bound field dynamically. 
     foreach (DataColumn col in gridviewdt.Columns) 
     { 
      //Declare the bound field and allocate memory for the bound field. 
      BoundField bfield = new BoundField(); 

      //Initalize the DataField value. 
      bfield.DataField = col.ColumnName; 

      //Initialize the HeaderText field value. 
      bfield.HeaderText = col.ColumnName; 

      //Add the newly created bound field to the GridView. 
      MainGridView.Columns.Add(bfield); 

     } 

    } 

// Bind Datatable to gridview 
MainGridView.DataSource = gridviewdt; 
MainGridView.DataBind(); 

在上面的代码,我想提出的超链接上特定的列中的数据。如果我把超链接直接放在Datatable上,那么它会显示它,因为它没有执行。

<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton> 

如何在一些gridview列上添加上面的链接按钮?

回答

2

如果我们想在gridview控件中声明地添加一个LinkButton,那么我们将它包装在TemplateField中,而不是在BoundField之内。此外,我不知道你为什么循环通过DataTable(我猜是GridView的源代码)。正确的做法是在将数据绑定到gridview之前将TemplateField添加到列集合中,最后在RowDataBound事件中添加控件,该事件针对绑定到gridview的每行都引发。

您可以使用此: -

Page_Load: -

if (!IsPostBack) 
{ 
    TemplateField myTemplate = new TemplateField(); 
    myTemplate.HeaderText = "MyLinkButton"; 
    MainGridView.Columns.Add(myTemplate); 
    BindGrid(); 
} 

这里,BindGrid是将简单的数据绑定到你的GridView的方法: -

private void BindGrid() 
{ 
    MainGridView.DataSource = GetData(); \\Your data source here 
    MainGridView.DataBind(); 
} 

最后在gridview的RowDataBound事件中添加LinkButton控件,如下所示: -

protected void MainGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     LinkButton myLink = new LinkButton(); 
     myLink.ID = "LinkButton1"; 
     myLink.Text = "LinkButton"; 
     myLink.Click += myLink_Click; 
     e.Row.Cells[0].Controls.Add(myLink); 
    } 
} 

请注意,因为我只添加了1列(在页面加载中),因此我使用e.Row.Cells[0]来获得第一列。如果您添加多列,那么您将不得不相应地更改代码。

+0

感谢您的解决方案。我正在循环数据表以从数据表中获取GridView中的标题名称。在上面的代码中,如果我使用'myLink.Text =“LinkBut​​ton”;',那么我从数据表获取的原始数据将被替换。我想使用gridview和数据表的数据。 –

+1

我在这里工作。我添加了'myLink.Text = e.Rows.Cells [3] .Text'。感谢帮助 –