Hi das,
I have created sample code which fullfill requirement.
HTML
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowEditing="OnRowEditing">
<Columns>
<asp:BoundField DataField="C#" HeaderText="C#" ItemStyle-Width="150" />
<asp:BoundField DataField="Java" HeaderText="Java" ItemStyle-Width="150" />
<asp:BoundField DataField="PHP" HeaderText="PHP" ItemStyle-Width="150" />
<asp:CommandField ShowEditButton="true" />
</Columns>
</asp:GridView>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("C#", typeof(int));
dt.Columns.Add("Java", typeof(int));
dt.Columns.Add("PhP", typeof(int));
dt.Rows.Add(10, 5, 0);
dt.Rows.Add(5, 5, 0);
dt.Rows.Add(8, 0, 0);
ViewState["dt"] = dt;
this.BindGrid();
}
}
protected void BindGrid()
{
GridView1.DataSource = ViewState["dt"] as DataTable;
GridView1.DataBind();
}
protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
int asp = Convert.ToInt32(GridView1.Rows[e.NewEditIndex].Cells[0].Text);
int java = Convert.ToInt32(GridView1.Rows[e.NewEditIndex].Cells[1].Text);
int php = Convert.ToInt32(GridView1.Rows[e.NewEditIndex].Cells[2].Text);
this.BindGrid();
GridView1.Rows[e.NewEditIndex].Cells[2].Enabled = php > 0;
GridView1.Rows[e.NewEditIndex].Cells[1].Enabled = java > 0;
GridView1.Rows[e.NewEditIndex].Cells[0].Enabled = asp > 0;
}
Screenshot

I hope works for you.