There is a problem with the way you are trying to get the controls that containt the data required for performing the update. You do not need to create instances of the textbox using an initializer (= new TextBox). Moreover you need to use Findcontrol instead of assigning a textbox to the value of a cell. Well, to cut the story short, the code should be along these lines- try this:
TextBox txtName ;
TextBox txtImage ;
TextBox txtPrice ;
TextBox txtDescription ;
txtName = (TextBox)e.Item.Cells[1].FindCotrol("nameOfTheTextBoxtoFind");
txtImage = (TextBox)e.Item.Cells[2].FindCotrol("nameOfTheTextBoxtoFind");
txtPrice = (TextBox)e.Item.Cells[3].FindCotrol("nameOfTheTextBoxtoFind");;
txtDescription = (TextBox)e.Item.Cells[4].FindCotrol("nameOfTheTextBoxtoFind");
and remember to check if cell index is zero-based and that you also have to check if the control was found before you attempt to get the value. Use code similar to this:
string name=string.empty;
if(txtName !=null)
{ name= txtName.Text;}
Happy Coding
There is no competition, its just me.