Do not bind column which needs to be kept hidden for user. Instead of that you can use hidden field and you can get value of the hidden field as shown in below sample :
ASPX Code:
<asp:GridView ID="gridMain" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:TemplateField HeaderText="EmployeeName">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("EmployeeName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("EmployeeName") %>'></asp:Label>
<input type="hidden" runat="server" id="hiddenEmployeeId" value='<%#Eval("EmployeeID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Edit Services">
<ItemTemplate>
<asp:LinkButton ID="lnkButtonAssignServ" runat="server" Autopostback="true" CauseValidation="true" OnClick="btnAssignServ_Click"
Text="Edit Services"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code Behind :
protected void btnAssignServ_Click(object sender, EventArgs e)
{
GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
gridMain.SelectedIndex = row.RowIndex;
var customerId = gridMain.Rows[gridMain.SelectedIndex].FindControl("hiddenEmployeeId") as HtmlInputHidden;
if (customerId != null)
{
Session["custid"] = customerId.Value;
}
}