Use a template field.
<asp:gridview id="gvFoo" runat="server" autogeneratecolumns="false">
<columns>
<asp:templatefield>
<itemtemplate>
<asp:textbox id="tbFoo" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "foo") %>' />
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
If you need to manually set the data, remove the text='<%# ... %>' part. Setup the event handler for the RowDataBound event to set the text of the textbox for each row.
protected void gvFoo_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
TextBox tb = (TextBox)e.Row.FindControl("tbFoo");
tb.Text = "foobar";
}
}