Last updated: 23rd May 2024
I have shared two different methods (procedures) in this tutorial showing how to add or bind LinkButton to GridView control dynamically using C# and VB.We will explore another interesting procedure in this tutorial (besides simply adding a LinkButton). I’ll show how to add a LinkButton to a GridView row based on certain conditions. Conditional manipulations are fun and it helps us understand the procedure clearly.
1st Procedure - Bind LinkButton using RowDataBound Event
I’ll first add a GridView control in my web page, and add columns and rows from code behind. While the page loads for the first time, I’ll create four columns and add few rows to the GridView. The last column however, will not have any header. This is the column were I’ll add the LinkButton control inside GridView's RowDataBound event.
Add a GridView control.
<!DOCTYPE html>
<html>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView"
Font-Names="Arial"
Font-Size="0.75em"
CellPadding="5" CellSpacing="0"
ForeColor="#333"
AutoGenerateColumns="true"
runat="server">
<HeaderStyle BackColor="#989898" ForeColor="white" />
</asp:GridView>
</div>
</form>
</body>
</html>
using System; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { System.Data.DataTable mytable = new System.Data.DataTable(); protected void Page_Load(object sender, EventArgs e) { createGrid(); addRowsToGrid(); // NOW BIND THE GRIDVIEW WITH THE DATATABLE. GridView.DataSource = mytable; GridView.DataBind(); } private void createGrid() { // CREATE A GRID FOR DISPLAYING A LIST OF BOOKS. System.Data.DataColumn tColumn = null; // TABLE COLUMNS. tColumn = new System.Data.DataColumn("Book ID", System.Type.GetType("System.String")); mytable.Columns.Add(tColumn); tColumn = new System.Data.DataColumn("Name of the Book", System.Type.GetType("System.String")); mytable.Columns.Add(tColumn); tColumn = new System.Data.DataColumn("Price ($)", System.Type.GetType("System.String")); mytable.Columns.Add(tColumn); tColumn = new System.Data.DataColumn(" ", System.Type.GetType("System.String")); mytable.Columns.Add(tColumn); } // Add some data to the grid. private void addRowsToGrid() { // ADD ROWS TO THE DATATABLE. mytable.Rows.Add(1, "Computer Architecture", "125.60"); mytable.Rows.Add(2, "Advanced Composite Material", "50.00"); mytable.Rows.Add(3, "Asp.Net 4 Blue Book", "80.00"); mytable.Rows.Add(4, "Strategies Unplugged", "99.99"); mytable.Rows.Add(5, "Teaching Science", "51.50"); } protected void GridView_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { // CREATE A LinkButton AND IT TO EACH ROW. LinkButton lb = new LinkButton(); lb.ID = "lbBooks"; lb.Text = "Select"; e.Row.Cells[3].Controls.Add(lb); } } }
Option Explicit On Partial Class _Default Inherits System.Web.UI.Page Dim mytable As New Data.DataTable() Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load If Not IsPostBack Then createGrid() addRowsToGrid() ' NOW BIND THE GRIDVIEW WITH THE DATATABLE. GridView.DataSource = mytable GridView.DataBind() End If End Sub Private Sub createGrid() ' CREATE A GRID FOR DISPLAYING A LIST OF BOOKS. Dim tColumn As Data.DataColumn ' TABLE COLUMNS. tColumn = New Data.DataColumn("Book ID", System.Type.GetType("System.String")) mytable.Columns.Add(tColumn) tColumn = New Data.DataColumn("Name of the Book", System.Type.GetType("System.String")) mytable.Columns.Add(tColumn) tColumn = New Data.DataColumn("Price ($)", System.Type.GetType("System.String")) mytable.Columns.Add(tColumn) tColumn = New Data.DataColumn(" ", System.Type.GetType("System.String")) mytable.Columns.Add(tColumn) End Sub Private Sub addRowsToGrid() ' ADD ROWS TO THE DATATABLE. mytable.Rows.Add(1, "Computer Architecture", "125.60") mytable.Rows.Add(2, "Advanced Composite Material", "50.00") mytable.Rows.Add(3, "Asp.Net 4 Blue Book", "80.00") mytable.Rows.Add(4, "Strategies Unplugged", "99.99") mytable.Rows.Add(5, "Teaching Science", "51.50") End Sub Protected Sub GridView_RowDataBound(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then ' CREATE A LinkButton AND IT TO EACH ROW. Dim lb = New LinkButton() lb.ID = "lbBooks" lb.Text = "Select" e.Row.Cells(3).Controls.Add(lb) End If End Sub End Class
2nd Procedure
Add LinkButton on some condition.
In the second procedure, I’ll add a Button control on the web page. On button’s Click event, I’ll create and bind the LinkButton to the GridView. In addition, I’ll now set a condition and add the LinkButton to each row, if the Price is greater or equal to $80.
Simply, add the below code in the Markup section, just after the GridView. It’s the Asp.Net Button control, attached with the OnClick event.
<asp:Button ID="bt" runat="server" Text="Add Link" OnClick="bt_Click" />
You can now remove "onrowdatabound="GridView_RowDataBound" from the GridView in this example. Since, I'll add the LinkButton using the Button OnClick event.
protected void bt_Click(object sender, EventArgs e) { foreach (GridViewRow row in GridView.Rows) { if (row.RowType == DataControlRowType.DataRow) { // ADD LINK BUTTON IF PRICE >= $80 if (double.Parse(row.Cells[2].Text) >= 80) { LinkButton lb = new LinkButton(); lb.ID = "lbBooks"; lb.Text = "Add"; row.Cells[3].Controls.Add(lb); } } } }
Protected Sub bt_Click(ByVal sender As Object, ByVal e As EventArgs) For Each row As GridViewRow In GridView.Rows If row.RowType = DataControlRowType.DataRow Then ' ADD LINK BUTTON IF PRICE MORE THAN $80. If Val(row.Cells(2).Text) >= 80 Then Dim lb As New LinkButton() lb.ID = "lbBooks" lb.Text = "Add" row.Cells(3).Controls.Add(lb) End If End If Next End Sub