回发asp.net后如何在GridView中保持状态

时间:2018-07-10 07:30:36

标签: c# asp.net gridview

我的程序运行正常,页面加载后我的gridview加载成功,但是我遇到的问题是,当我单击编辑功能上的edit并输入新值并按update时,我的程序进入空白屏幕直到我再次从下拉列表中选择产品,它才会更新数据库,但是我希望它保持其状态并在单击“更新”后保持在同一页面上。这是我的代码。

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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

完成RefreshGrid更新后,在GridView1_RowUpdating事件中调用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);
        }

    }