Check This. I don't know what is your HTML code is, so i posted this working example as your requiremnts.
You Just have to bind the Gridview. and it will work as your requirement
the Gridview Code.
<asp:GridView ID="GridView1" runat="server" GridLines="None"
EmptyDataText="No Rcords Found" AutoGenerateColumns="False"
onrowcommand="GridView1_RowCommand" onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton CommandArgument='<%# ((GridViewRow) Container).RowIndex %>' ID="LinkButton1" runat="server" CommandName="sel">Select</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ID">
<EditItemTemplate>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%#Eval("ID") %>' Enabled="false"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="name" Visible="false">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("name") %>' Enabled="false"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
and on row command
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "sel")
{
int rowIndex = Convert.ToInt32(e.CommandArgument);
GridView1.Columns[2].Visible = true;
TextBox txt = (TextBox)GridView1.Rows[rowIndex].FindControl("TextBox1");
txt.Enabled = true;
}
}