动态添加超链接到gridview

时间:2015-12-10 03:11:50

标签: c# asp.net gridview hyperlink

我正在动态生成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列上添加上面的链接按钮?

1 个答案:

答案 0 :(得分:2)

如果我们想在gridview控件中以声明方式添加LinkButton,那么我们将其包含在TemplateField内而不是BoundField内。另外我不确定你为什么要遍历DataTable(我猜它是gridview的源码)。正确的方法是在将数据绑定到gridview之前将TemplateField添加到columns集合,最后在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的LinkButton事件中添加RowDataBound控件,如下所示: -

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]来获取第一列。如果添加多个列,则必须相应地更改代码。