簡體   English   中英

回發asp.net后如何在GridView中保持狀態

[英]How to keep state in gridview after a postback asp.net

我的程序運行正常,頁面加載后加載了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;
        }
    }
}

完成database更新后,在GridView1_RowUpdating事件中調用RefreshGrid方法。

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

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM