Reputation:
my programme is working fine, my gridview loads etc after page load, but the problem i am having is that when i click on edit on the edit function and input a new value and press update, my programme goes to a blank screen until i choose the product from my dropdownlist again, it is updating the database but i would like it to keep its state and stay on the same page after i click update. Here is my code.
public partial class Default : Page
{
private int Target { get; set; }
private string ProductShortDesc { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (ddlproduct.Items.Count == 0)
{
BindDropDownList();
RefreshGrid(ProductShortDesc);
}
}
}
private void BindDropDownList()
{
{
try
{
string[] productTexts;
string[] productValues;
BusinessManager biz = new BusinessManager();
biz.GetProductSeriesList(out productTexts, out productValues);
ddlproduct.Items.Clear();
int x = 0;
foreach (string s in productTexts)
{
ListItem li = new ListItem(s, productValues[x]);
x++;
ddlproduct.Items.Add(li);
}
}
catch (SqlException ex)
{
throw new Exception("Failed to get product items", ex);
}
catch (Exception ex)
{
throw new Exception("Failed to get product items:", ex);
}
}
}
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
ProductShortDesc = ddlproduct.SelectedValue;
RefreshGrid(ProductShortDesc);
}
public void RefreshGrid(string productShortDesc)
{
try
{
// get the list of records & bind to the grid
BusinessManager biz = new BusinessManager();
ProductShortDesc = ddlproduct.SelectedValue;
DataTable dt = new DataTable();
dt = biz.GetPackingShiftData(ProductShortDesc);
GridView1.DataSource = dt.DefaultView;
GridView1.DataBind();
}
catch (SqlException ex)
{
throw new Exception("Could not populate the list due to an SQL error:", ex);
}
catch (Exception ex)
{
throw new Exception("Application error in adding products to the list:", ex);
}
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// Assign Target property Value
try
{
TextBox tb =
(TextBox) GridView1.Rows[e.RowIndex].FindControl("TargetTextBox"); //finds the target column
Target = int.Parse((tb.Text));
int id = int.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
using (DataManager dmgr = new DataManager())
{
dmgr.Connect("PRODUCTION");
dmgr.PackingShiftTargetUpdate(id, Target);
dmgr.Disconnect();
}
GridView1.EditIndex = -1;
DataBind();
}
catch (SqlException msg)
{
throw new Exception("Input error:", msg);
}
catch (Exception ex)
{
throw new Exception("Only a Number input is allowed:", ex);
}
}
protected void GridView1_OnRowEditing(object sender, GridViewEditEventArgs e)
{
try
{
RefreshGrid(ProductShortDesc);
GridView1.EditIndex = e.NewEditIndex;
DataBind();
}
catch (SqlException ex)
{
throw new Exception("Editing row error", ex);
}
catch (Exception ex)
{
throw new Exception("Application Error when editing application", ex);
}
}
protected void GridView1_OnRowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
try
{
//Reset the edit index.
GridView1.EditIndex = -1;
//Bind data to the GridView control.
DataBind();
}
catch (SqlException ex)
{
throw new Exception("error when editing row", ex);
}
catch (Exception ex)
{
throw new Exception("Application error when cancelling", ex);
}
}
protected void GridView1_OnRowUpdated(object sender, GridViewUpdatedEventArgs e)
{
GridView1.EditIndex = -1;
DataBind();
}
private void HandleSqlEx(SqlException ex, string Msg)
{
ExceptionLabel.ForeColor = Color.Red;
ExceptionLabel.Text = "SQL error:" + Msg;
}
private void HandleException(Exception ex, string Msg)
{
ExceptionLabel.ForeColor = Color.Red;
ExceptionLabel.Text = Msg;
}
}
}
Upvotes: 0
Views: 1002
Reputation: 833
Call your RefreshGrid
method in GridView1_RowUpdating
event after done updating database
.
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// Assign Target property Value
try
{
TextBox tb =
(TextBox) GridView1.Rows[e.RowIndex].FindControl("TargetTextBox"); //finds the target column
Target = int.Parse((tb.Text));
int id = int.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
using (DataManager dmgr = new DataManager())
{
dmgr.Connect("PRODUCTION");
dmgr.PackingShiftTargetUpdate(id, Target);
dmgr.Disconnect();
}
GridView1.EditIndex = -1;
RefreshGrid(ProductShortDesc);
DataBind();
}
catch (SqlException msg)
{
throw new Exception("Input error:", msg);
}
catch (Exception ex)
{
throw new Exception("Only a Number input is allowed:", ex);
}
}
Upvotes: 1