首页 > 解决方案 > C#在点击时隐藏和显示按钮

问题描述

我正在尝试显示执行存储过程的运行按钮,单击该按钮会隐藏并出现另一个按钮,显示“微调器/加载器”按钮,直到执行完成返回运行。

当我单击运行时,尽管我没有看到按钮有任何变化,但程序会执行。当我删除底部的代码时,存储过程完成后按钮会发生变化。

在我的点击事件的顶部,我有:

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

标签: c#asp.netwebforms

解决方案


对元素的更改仅在回发后发送一次,而不是在您更改它们时立即发送。很确定要完成您正在尝试做的事情(在回发运行时显示微调器),您将需要使用UpdateProgress 控件之类的东西。


推荐阅读