Lets the TextBox is in ListView or any MultiDimensional DataBound Control so that the TextBox have some default value first time its load.
TextBox HTMLization :- (Recommend to use UpdatePanel to ajaxify)
<asp:TextBox ID="txtProdAmount" runat="server" Width="80" Text='<%#Eval("product_amt", "{0:0.00}")%>' AutoPostBack="true"
ontextchanged="txtProdAmount_TextChanged"
onchange="if (!confirm('Are U Sure to Change the Amount ?')) { this.value=this.defaultValue; return false; }" EnableViewState="true">
</asp:TextBox>
AutoPostBack="true" // To Call the ServerSide || CodeBehind TextChanged Event.
ontextchanged="txtProdAmount_TextChanged" // Call ServerSide TextChanged Event once confirm from client.
onchange="" // Call ClientSide TextChanged Event
Javascript:-
if (!confirm('Are U Sure to Change the Amount ?')) // on Confirm if action is "Cancel"
{ this.value=this.defaultValue; return false; } // then restore its previous value in textbox
Code Behind:-
protected void txtProdAmount_TextChanged(object sender, EventArgs e)
{
TextBox txtProdAmount= (TextBox)sender;
RepeaterItem rptItem = (RepeaterItem)txtProdAmount.NamingContainer;
HiddenField hdnProdID = (HiddenField)rptItem.FindControl("hdnProdID");
if (!string.IsNullOrEmpty(txtProdAmount.Text.Trim()) && txtProdAmount.Text.Trim() != "")
{
int liSuccess = 0;
decimal? ldProdID = null;
decimal? ldProdAmount = null;
ldProdID = Convert.ToDecimal(hdnProdID.Value);
ldProdAmount = Convert.ToDecimal(txtProdAmount.Text);
Product loProductObj = new Product();
liSuccess = loProductObj.UpdateProductAmount(ldProdID , ldProdAmount ); // Call Update Procedure
if (liSuccess > 0)
{
txtProdAmount.Text = Convert.ToDecimal(txtProdAmount.Text).ToString("0.00"); // To re-Format the TextBox
Common.ShowAlert("Product Amount Updated.", this); // Alert if Updated
}
}
}
===[ END ]=========