OK. So you want to get the textboxes of the GridView to be got filled automatically on second run if data is available in the database, right?
Follow this-
1. Do little changes to the TextBoxes as follows
<asp:gridview id="Gridview1" runat="server" showfooter="true" xmlns:asp="#unknown">
AutoGenerateColumns="false" onrowcreated="Gridview1_RowCreated">
<columns>
<asp:boundfield datafield="RowNumber" headertext="Row Number" />
<asp:templatefield headertext="Header 1">
<itemtemplate>
<asp:textbox id="TextBox1" runat="server" text="<%#Eval("Column1")"></asp:textbox>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Header 2">
<itemtemplate>
<asp:textbox id="TextBox2" runat="server" text="<%#Eval("Column2")"></asp:textbox>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Header 3">
<itemtemplate>
<asp:textbox id="TextBox3" runat="server" text="<%#Eval("Column3")"></asp:textbox>
</itemtemplate>
<footerstyle horizontalalign="Right" />
<footertemplate>
<asp:button id="ButtonAdd" runat="server" text="Add New Row">
onclick="ButtonAdd_Click" />
</asp:button></footertemplate>
</asp:templatefield>
<asp:templatefield headertext="Header 3">
<itemtemplate>
<asp:label id="Label1" runat="server" text="Click Me"></asp:label>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
2. Create a new method to get records as a datatable.
3. Call this method in the Page_Load() instead of SetInitialRow()
That's all :)
In case you need further assistance, please let me know :)