C# 在点击时隐藏和显示按钮
C# hide and show buttons on click
我正在尝试显示执行存储过程的 运行 按钮,该按钮在单击时隐藏并且出现另一个按钮显示 'spinner/loader' 按钮,直到执行完成返回到 运行.
当我单击 运行 时,虽然我没有看到按钮有任何变化,但程序会执行。当我删除底部的代码时,按钮会在存储过程完成后发生变化。
在点击事件的顶部我有:
btnRun.Visible = false;
LoadButton.Visible = true;
在底部:
LoadButton.Visible = false;
btnRun.Visible = true;
我猜这与 post 背部有关,这附近有没有?
编辑:这是我的点击事件 -
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;
}
}
}
对元素的更改仅在回发后发送一次,而不是在您更改它们时立即发送。很确定要完成您正在尝试做的事情(在回发为 运行 时显示微调器),您将需要使用类似 UpdateProgress control.
的东西
我正在尝试显示执行存储过程的 运行 按钮,该按钮在单击时隐藏并且出现另一个按钮显示 'spinner/loader' 按钮,直到执行完成返回到 运行.
当我单击 运行 时,虽然我没有看到按钮有任何变化,但程序会执行。当我删除底部的代码时,按钮会在存储过程完成后发生变化。
在点击事件的顶部我有:
btnRun.Visible = false;
LoadButton.Visible = true;
在底部:
LoadButton.Visible = false;
btnRun.Visible = true;
我猜这与 post 背部有关,这附近有没有?
编辑:这是我的点击事件 -
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;
}
}
}
对元素的更改仅在回发后发送一次,而不是在您更改它们时立即发送。很确定要完成您正在尝试做的事情(在回发为 运行 时显示微调器),您将需要使用类似 UpdateProgress control.
的东西