Introduction
In this article, you will see how to enable or disable a checkbox in GridView records based on the condition.
RowDataBound Event
A GridviewRowEventArgs object is passed to the event-handling method, that enables you to access the properties of the row being bound. To access a specific cell in the row, use the "cell" property of the GridViewRow object contained in the Row property of the GridEventRowEventArgs object.
Now let's have a look at this web application to see how to use the RowDataBound Event.
Step 1
Open Visual Studio then select "File" -> "New" -> "Website..." as in the following figure:
Step 2
Now go to the Solution Explorer and add a new item as in the following figure:
Step 3
Now add a new web form on your web application as in the following figure:
Step 4
Write the following code in the "default.aspx" page:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Enable/Disable Checkbox in Gridview based on condtion in ASP.Net</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <asp:GridView ID="gvDetails" AutoGenerateColumns="False" CellPadding="3" runat="server"
- OnRowDataBound="gvDetails_RowDataBound" BackColor="White"
- BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" ForeColor="Black" GridLines="Vertical">
- <AlternatingRowStyle BackColor="#CCCCCC" />
- <Columns>
- <asp:TemplateField>
- <ItemTemplate>
- <asp:CheckBox ID="chkSelect" runat="server" />
- </ItemTemplate>
- </asp:TemplateField>
- <asp:BoundField HeaderText="UserId" DataField="UserId" />
- <asp:BoundField HeaderText="UserName" DataField="UserName" />
- <asp:BoundField HeaderText="Education" DataField="Education" />
- <asp:BoundField HeaderText="Location" DataField="Location" />
- </Columns>
- <FooterStyle BackColor="#CCCCCC" />
- <HeaderStyle BackColor="Black" Font-Bold="true" ForeColor="White" />
- <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
- <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
- <SortedAscendingCellStyle BackColor="#F1F1F1" />
- <SortedAscendingHeaderStyle BackColor="#808080" />
- <SortedDescendingCellStyle BackColor="#CAC9C9" />
- <SortedDescendingHeaderStyle BackColor="#383838" />
- </asp:GridView>
- </div>
- </form>
- </body>
- </html>
Add the connectionstring in web.config file such like :
- <connectionStrings>
- <add name="dbconnection" connectionString="Data Source=; Initial Catalog=Employee;
- User=abc; Password=***" providerName="SqlClient"/>
- </connectionStrings>
Step 5
Now write the following code in the "default.aspx.cs" page:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Data;
- using System.Web.UI.WebControls;
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- BindData();
- }
- }
- protected void BindData()
- {
- DataTable dt = new DataTable();
- dt.Columns.Add("UserId", typeof(Int32));
- dt.Columns.Add("UserName", typeof(string));
- dt.Columns.Add("Education", typeof(string));
- dt.Columns.Add("Location", typeof(string));
- DataRow dtr = dt.NewRow();
- dtr["UserId"] = 1;
- dtr["UserName"] = "Pankaj Lohani";
- dtr["Education"] = "MCA";
- dtr["Location"] = "New Delhi";
- dt.Rows.Add(dtr);
- dtr = dt.NewRow();
- dtr["UserId"] = 2;
- dtr["UserName"] = "Nimit Joshi";
- dtr["Education"] = "MCA";
- dtr["Location"] = "Ghaziabad";
- dt.Rows.Add(dtr);
- dtr = dt.NewRow();
- dtr["UserId"] = 3;
- dtr["UserName"] = "Amit Senwal";
- dtr["Education"] = "BCA";
- dtr["Location"] = "Greater Noida";
- dt.Rows.Add(dtr);
- dtr = dt.NewRow();
- dtr["UserId"] = 4;
- dtr["UserName"] = "Pravesh Khanduri";
- dtr["Education"] = "BCA";
- dtr["Location"] = "Delhi";
- dt.Rows.Add(dtr);
- dtr = dt.NewRow();
- dtr["UserId"] = 5;
- dtr["UserName"] = "Ravi Kumar";
- dtr["Education"] = "BCA";
- dtr["Location"] = "Delhi";
- dt.Rows.Add(dtr);
- dtr = dt.NewRow();
- dtr["UserId"] = 6;
- dtr["UserName"] = "Ainul Hasan";
- dtr["Education"] = "MCA";
- dtr["Location"] = "Gurgaon";
- dt.Rows.Add(dtr);
- gvDetails.DataSource = dt;
- gvDetails.DataBind();
- }
- protected void gvDetails_RowDataBound(object sender, GridViewRowEventArgs e)
- {
- if (e.Row.RowType == DataControlRowType.DataRow)
- {
- CheckBox chkbox = (CheckBox)e.Row.FindControl("chkSelect");
- if (e.Row.Cells[3].Text == "BCA")
- {
- chkbox.Enabled = false;
- }
- else
- {
- chkbox.Enabled = true;
- }
- }
- }
- }
In the code above you saw that before the GridView control can be rendered, each row in the control must be bound to a record. The "RowDataBound" event is raised when a data row is bound to data in the GridView control. This enables you to provide an event-handling method that performs a modification of the values bound to the row, when the event occurs.
Step 6
Now debug the application by pressing F5; the output will then appear in the browser as in the following figure:
Step 7
Now you can check only the enable checkbox as in the following figure:
Summary
ASP.NET automatically remembers whether the Checkboxes were and were not checked across postbacks. We can also programmatically access the checkbox in code to determine whether a given checkbox is checked, or to change the checked state.