обновление отменить на gridview asp.net - PullRequest
0 голосов
/ 15 июня 2011

Я пытаюсь обновить gridview на asp.net с помощью хранимой процедуры, но он всегда сбрасывается на исходные значения.Что я делаю не так?

edit: добавлен весь код страницы

  protected void page_PreInit(object sender, EventArgs e)
    {
        MembershipUser UserName;
        try
        {
            if (User.Identity.IsAuthenticated)
            {
                // Set theme in preInit event
                UserName = Membership.GetUser(User.Identity.Name);
                Session["UserName"] = UserName;
            }

        }
        catch (Exception ex)
        {
            string msg = ex.Message;


        }


    }
    protected void Page_Load(object sender, EventArgs e)
    {
        userLabel.Text = Session["UserName"].ToString();

        SqlDataReader myDataReader = default(SqlDataReader);

        SqlConnection MyConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["RescueAnimalsIrelandConnectionString"].ConnectionString);

        SqlCommand command = new SqlCommand("sp_EditRescueDetails", MyConnection);

        if (!User.Identity.IsAuthenticated)
        {
        }
        else
        {
            command.Parameters.AddWithValue("@UserName", userLabel.Text.Trim());

        }

        try
        {
            command.CommandType = CommandType.StoredProcedure;
            MyConnection.Open();


            myDataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
            // myDataReader.Read();


            GridViewED.DataSource = myDataReader;
            GridViewED.DataBind();

            if (GridViewED.Rows.Count >= 1)
            {

                GridViewED.Visible = true;
                lblMsg.Visible = false;

            }
            else if (GridViewED.Rows.Count < 1)
            {
                GridViewED.Visible = false;

                lblMsg.Text = "Your search criteria returned no results.";
                lblMsg.Visible = true;
            }





            MyConnection.Close();
        }
        catch (SqlException SQLexc)
        {
            Response.Write("Read Failed : " + SQLexc.ToString());
        }
    }
    //to edit grid view
    protected void GridViewED_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridViewED.EditIndex = e.NewEditIndex;

    }


 protected void GridViewED_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        SqlConnection MyConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["RescueAnimalsIrelandConnectionString"].ConnectionString);
        SqlCommand command = new SqlCommand("sp_UpdateRescueDetails", MyConnection);

        if (!User.Identity.IsAuthenticated)
        {
        }
        else
        {
            command.Parameters.AddWithValue("@UserName", userLabel.Text.Trim());

            command.Parameters.Add("@PostalAddress", SqlDbType.VarChar).Value = ((TextBox)GridViewED.Rows[e.RowIndex].Cells[0].Controls[0]).Text;

            command.Parameters.Add("@TelephoneNo", SqlDbType.VarChar).Value = ((TextBox)GridViewED.Rows[e.RowIndex].Cells[1].Controls[0]).Text;

            command.Parameters.Add("@Website", SqlDbType.VarChar).Value = ((TextBox)GridViewED.Rows[e.RowIndex].Cells[2].Controls[0]).Text;

            command.Parameters.Add("@Email", SqlDbType.VarChar).Value = ((TextBox)GridViewED.Rows[e.RowIndex].Cells[3].Controls[0]).Text;

        }


        command.CommandType = CommandType.StoredProcedure;
        MyConnection.Open();

        command.ExecuteNonQuery();


        MyConnection.Close();


        GridViewED.EditIndex = -1;



    }

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Я подозреваю, что код, загружающий сетку, вызывается при обратной передаче, которая вызывает извлечение данных из базы данных, когда вы этого не хотите.

Да - я думаю, вы хотите, чтобы код загружался только в том случае, если он не является обратной передачей.Для этого вы можете использовать свойство Page.IsPostBack.

Примерно так:

protected void Page_Load(object sender, EventArgs e)
{
    userLabel.Text = Session["UserName"].ToString();

    if (!IsPostBack) {

    SqlDataReader myDataReader = default(SqlDataReader);

    SqlConnection MyConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["RescueAnimalsIrelandConnectionString"].ConnectionString);

    SqlCommand command = new SqlCommand("sp_EditRescueDetails", MyConnection);

    if (!User.Identity.IsAuthenticated)
    {
    }
    else
    {
        command.Parameters.AddWithValue("@UserName", userLabel.Text.Trim());

    }

    try
    {
        command.CommandType = CommandType.StoredProcedure;
        MyConnection.Open();


        myDataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
        // myDataReader.Read();


        GridViewED.DataSource = myDataReader;
        GridViewED.DataBind();

        if (GridViewED.Rows.Count >= 1)
        {

            GridViewED.Visible = true;
            lblMsg.Visible = false;

        }
        else if (GridViewED.Rows.Count < 1)
        {
            GridViewED.Visible = false;

            lblMsg.Text = "Your search criteria returned no results.";
            lblMsg.Visible = true;
        }





        MyConnection.Close();
    }
    catch (SqlException SQLexc)
    {
        Response.Write("Read Failed : " + SQLexc.ToString());
    }
    }
}
0 голосов
/ 15 июня 2011

Не связывайте свои данные в событии Page_Load.Создайте отдельный метод, который делает это, а затем при загрузке страницы, если! IsPostback, вызовите его.

Причина для привязки данных заключается в том, что это собственный метод, потому что вам нужно вызывать его, если выпролистывание набора данных, удаление, обновление и т. д. после выполнения задачи.Вызов метода лучше, чем многие экземпляры одного и того же повторяющегося кода привязки данных.

...