Hi,
An important property that plays a special role in Update and Delete
operations is the DataKeyNames property. This property is typically set to
the names of fields from the data source that are part of a primary key used
to match a given row in the data source. Multiple keys are comma-separated
when specifying this property declaratively, although it is common to only
have one primary key field. The values of fields specified by the
DataKeyNames property are round-tripped in viewstate for the sake of
retaining original values to pass to an Update or Delete operation, even if
that field is not rendered as one of the columns in the GridView control.
When the GridView invokes the data source Update or Delete operation, it
passes the values of these fields to the data source in a special Keys
dictionary, separate from the Values dictionary that contains new values
entered by the user while the row is in edit mode (for update operations).
The contents of the Values dictionary are obtained from the input controls
rendered for the row in edit mode. To exclude a value from this dictionary,
set the ReadOnly property to true on the corresponding BoundField in the
Column collection. If you are using the GridView designer in Visual Studio,
the ReadOnly property is set to true for primary key fields by default.
ref:
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/data/gridview.aspx