Hi PSowmiya,
The DataGridViewComboBoxColumn does not have Enabled property.
To enable disable you need to use ReadOnly property.
Check this example. Now please take its reference and correct your code.
Namespaces
C#
using System.Data;
VB.Net
Imports System.Data
Code
C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "Russia");
dataGridView1.AutoGenerateColumns = false;
dataGridView1.ColumnCount = 3;
dataGridView1.AutoSize = false;
dataGridView1.ScrollBars = ScrollBars.Both;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.Columns[0].Name = "Id";
dataGridView1.Columns[0].HeaderText = "Id";
dataGridView1.Columns[0].DataPropertyName = "Id";
dataGridView1.Columns[0].ReadOnly = true;
dataGridView1.Columns[0].Width = 30;
dataGridView1.Columns[1].Name = "Name";
dataGridView1.Columns[1].HeaderText = "Name";
dataGridView1.Columns[1].DataPropertyName = "Name";
dataGridView1.Columns[1].ReadOnly = true;
dataGridView1.Columns[2].Name = "Country";
dataGridView1.Columns[2].HeaderText = "Country";
dataGridView1.Columns[2].DataPropertyName = "Country";
dataGridView1.Columns[2].ReadOnly = true;
dataGridView1.Columns[2].Width = 80;
DataGridViewComboBoxColumn returnstatus = new DataGridViewComboBoxColumn();
returnstatus.Name = "Status";
returnstatus.Width = 70;
returnstatus.Items.Add("Yes");
returnstatus.Items.Add("No");
dataGridView1.Columns.Insert(3, returnstatus);
DataGridViewComboBoxColumn cbVerified = new DataGridViewComboBoxColumn();
cbVerified.Width = 50;
cbVerified.Name = "Verified";
cbVerified.HeaderText = "Verified";
cbVerified.Items.Add("Yes");
cbVerified.Items.Add("No");
dataGridView1.Columns.Insert(4, cbVerified);
dataGridView1.DataSource = dt;
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 3)
{
DataGridViewComboBoxCell cbVerified = (DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells["Verified"];
if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString().ToLower() == "yes")
{
cbVerified.ReadOnly = false;
}
else
{
cbVerified.ReadOnly = true;
}
dataGridView1.Invalidate();
}
}
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
}
VB.Net
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim dt As DataTable = New DataTable()
dt.Columns.AddRange(New DataColumn(2) {
New DataColumn("Id", GetType(Integer)),
New DataColumn("Name", GetType(String)),
New DataColumn("Country", GetType(String))})
dt.Rows.Add(1, "John Hammond", "United States")
dt.Rows.Add(2, "Mudassar Khan", "India")
dt.Rows.Add(3, "Suzanne Mathews", "France")
dt.Rows.Add(4, "Robert Schidner", "Russia")
dataGridView1.AutoGenerateColumns = False
dataGridView1.ColumnCount = 3
dataGridView1.AutoSize = False
dataGridView1.ScrollBars = ScrollBars.Both
dataGridView1.AllowUserToAddRows = False
dataGridView1.Columns(0).Name = "Id"
dataGridView1.Columns(0).HeaderText = "Id"
dataGridView1.Columns(0).DataPropertyName = "Id"
dataGridView1.Columns(0).ReadOnly = True
dataGridView1.Columns(0).Width = 30
dataGridView1.Columns(1).Name = "Name"
dataGridView1.Columns(1).HeaderText = "Name"
dataGridView1.Columns(1).DataPropertyName = "Name"
dataGridView1.Columns(1).ReadOnly = True
dataGridView1.Columns(2).Name = "Country"
dataGridView1.Columns(2).HeaderText = "Country"
dataGridView1.Columns(2).DataPropertyName = "Country"
dataGridView1.Columns(2).ReadOnly = True
dataGridView1.Columns(2).Width = 80
Dim returnstatus As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn()
returnstatus.Name = "Status"
returnstatus.Width = 70
returnstatus.Items.Add("Yes")
returnstatus.Items.Add("No")
dataGridView1.Columns.Insert(3, returnstatus)
Dim cbVerified As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn()
cbVerified.Width = 50
cbVerified.Name = "Verified"
cbVerified.HeaderText = "Verified"
cbVerified.Items.Add("Yes")
cbVerified.Items.Add("No")
dataGridView1.Columns.Insert(4, cbVerified)
dataGridView1.DataSource = dt
End Sub
Private Sub dataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dataGridView1.CellValueChanged
If e.ColumnIndex = 3 Then
Dim cbVerified As DataGridViewComboBoxCell = CType(dataGridView1.Rows(e.RowIndex).Cells("Verified"), DataGridViewComboBoxCell)
If dataGridView1.Rows(e.RowIndex).Cells(3).Value.ToString().ToLower() = "yes" Then
cbVerified.ReadOnly = False
Else
cbVerified.ReadOnly = True
End If
dataGridView1.Invalidate()
End If
End Sub
Private Sub dataGridView1_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As EventArgs) Handles dataGridView1.CurrentCellDirtyStateChanged
If dataGridView1.IsCurrentCellDirty Then
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub
End Class
Screenshot
