Here is repost of code. tbPref_textchangedevent does not fire....
<asp:gridview id="gvBillets" runat="server" autogeneratecolumns="false" onrowdatabound="gvBillets_RowDataBound" onrowcommand="gvBillets_RowCommand" xmlns:asp="#unknown">
DataKeyNames="BIN" >
<columns>
<asp:templatefield headertext="Pri" itemstyle-width="20px">
<itemtemplate>
<asp:textbox id="tbPref" runat="server" width="20px" style="text-align:center" text="<%# Eval("Preference") %>" ontextchanged="tbPref_TextChanged" autopostback="true"></asp:textbox>
<itemstyle horizontalalign="Center"></itemstyle>
</itemtemplate>
</asp:templatefield>
<asp:templatefield itemstyle-width="40%" headertext="Details">
<itemtemplate>
<a id="A3" onclick="javascript:OpenBilletDetailsDialog('<%# Eval(" bin=") %>'); return false;">
href=#><%# Eval("billet_name") %></a>
</itemtemplate>
</asp:templatefield>
<asp:boundfield itemstyle-width="40%" headertext="Unit Name" readonly="true" datafield="unit_name" />
<asp:boundfield itemstyle-width="5%" headertext="RBSC" readonly="true" datafield="rbsc" />
<asp:boundfield itemstyle-width="5%" headertext="Desig" readonly="true" datafield="desig" />
<asp:boundfield itemstyle-width="5%" headertext="Rank" readonly="true" datafield="rank_desc" />
<asp:buttonfield buttontype="Link" commandname="Remove" itemstyle-horizontalalign="Center" itemstyle-cssclass="linkoff" headertext="Remove" text="X" />
<asp:boundfield datafield="BIN" visible="false" readonly="true" />
</columns>
</asp:gridview>
Here is code behind which does not fire.
protected void tbPref_TextChanged(object sender, EventArgs e)
{
GridViewRow row = ((GridViewRow)((TextBox)sender).NamingContainer);
TextBox Pri = (TextBox)row.FindControl("tbPref");
//code to go here when pri is changed