C # скрывать и показывать кнопки при нажатии - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь отобразить кнопку запуска, которая выполняет хранимую процедуру, которая при щелчке скрывается, и появляется другая кнопка, показывающая кнопку «спиннер / загрузчик», пока выполнение не завершится, возвращаясь к выполнению.

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

В верхней части моего события нажатия у меня есть:

btnRun.Visible = false;
LoadButton.Visible = true; 

и внизу:

LoadButton.Visible = false;
btnRun.Visible = true;

Я предполагаю, что это связано с постом назад, есть ли где-нибудь вокруг этого?

Редактировать: Это мое событие клика -

protected void Run_Click(object sender, EventArgs e)
{
    using (SqlConnection con = new SqlConnection(dbString))
    using (SqlCommand cmd = new SqlCommand("dbo.ExecuteJob", con))
    {
        try
        {
            btnRun.Visible = false;
            LoadButton.Visible = true;
            System.Threading.Thread.Sleep(100);

            string JobName = "CTIOM: " + ddlJob.SelectedItem.Text;

            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@job_name", JobName);

            SqlParameter statusParameter = new SqlParameter
            {
                ParameterName = "@returnStatus",
                SqlDbType = SqlDbType.Int,
                //Size = 255,
                Direction = ParameterDirection.Output
            };

            SqlParameter messageParameter = new SqlParameter
            {
                ParameterName = "@returnMessage",
                SqlDbType = SqlDbType.VarChar,
                Size = 1000,
                Direction = ParameterDirection.Output
            };

            SqlParameter durationParameter = new SqlParameter
            {
                ParameterName = "@returnRunDuration",
                SqlDbType = SqlDbType.VarChar,
                Size = 8,
                Direction = ParameterDirection.Output
            };

            cmd.Parameters.Add(statusParameter);
            cmd.Parameters.Add(messageParameter);
            cmd.Parameters.Add(durationParameter);

            con.Open();

            IAsyncResult result = cmd.BeginExecuteNonQuery();
            while (!result.IsCompleted)
            {                        
                System.Threading.Thread.Sleep(100);
            }
            cmd.EndExecuteNonQuery(result);

            string statusMessage = statusParameter.Value.ToString();
            lblStatus.Visible = true;
            lblStatus.Text = statusMessage;

            string returnMessage = messageParameter.Value.ToString();
            lblMessage.Visible = true;
            lblMessage.Text = returnMessage;
        }

        catch (SqlException ex)
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('" + ex.Message.ToString() + "')", true);
            return;
        }

        finally
        {
            con.Close();

            LoadButton.Visible = false;
            btnRun.Visible = true;
        }
    }
}

1 Ответ

1 голос
/ 25 октября 2019

Изменения в элементах отправляются только один раз после обратной передачи, а не сразу при их изменении. Совершенно точно, чтобы выполнить то, что вы пытаетесь сделать (отобразить счетчик, пока работает обратная передача), вам нужно будет использовать что-то вроде UpdateProgress control .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...