【问题标题】:display error message on click event在点击事件上显示错误消息
【发布时间】:2013-11-20 11:38:34
【问题描述】:

我有当前的事件序列,用户打开一个部门页面(aspx,后面带有 c# 代码)并出现大量按钮:

  • 将查询结果传递到单个网格视图的查询按钮(此 工作正常)
  • 发送电子邮件按钮,与查询按钮编号相同 (这也很好用)
  • Export to excel 按钮,在按下查询按钮后,导出 gridview 内容到 excel(这也很好用)

但现在我正试图让应用程序的导航更专业,即带有错误消息,正如我上面提到的,用户必须先按下查询按钮,然后按下“导出”或“电子邮件”按钮,否则导出或附加的excel文件是空的,所以如果用户按下的第一个按钮不是查询按钮,其他2个按钮应该给出错误消息告诉用户先按下查询按钮,我也想显示一条消息告诉用户电子邮件已发送,我是否使用 CATCH 和 TRY 来完成此操作?或者可能隐藏其他按钮并仅在用户按下查询按钮后显示它们?我只是问这个,因为我的按钮已经有 catch 和 try 方法,所以我不知道如何继续

我会很感激一些示例代码,因为我是 C# 新手

这是我的网格视图代码

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>

Excel 按钮

protected void Buttonexcel_Click(object sender, EventArgs e)
{

    try
    {
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/vnd.ms-excel";
        Response.Charset = "";
        Response.AddHeader("content-disposition", "attachment;filename=dados.xls");
        StringWriter sWriter = new StringWriter();
        HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
        GridView1.RenderControl(hWriter);
        Response.Output.Write(sWriter.ToString());
        Response.Flush();
        Response.End();
    }
    catch (Exception ex)
    {
        Label1.Text = ex.ToString();
    }

}

电子邮件按钮

protected void Buttonmail_Click(object sender, EventArgs e)
{
    fn_AttachGrid();
}

public void fn_AttachGrid()
{

    StringWriter sWriter = new StringWriter();
    HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
    GridView1.RenderControl(hWriter);
    MailMessage mail = new MailMessage();
    mail.IsBodyHtml = true;
    mail.To.Add(new MailAddress("receiver@domain.pt"));
    mail.Subject = "Sales Report";
    System.Text.Encoding Enc = System.Text.Encoding.ASCII;
    byte[] mBArray = Enc.GetBytes(sWriter.ToString());
    System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false);
    mail.Attachments.Add(new Attachment(mAtt, "dad.xls"));
    mail.Body = "Hi PFA";
    SmtpClient smtp = new SmtpClient();
    mail.From = new MailAddress("sender@gmail.com", "name");
    smtp.Host = "smtp.gmail.com";
    smtp.UseDefaultCredentials = true;
    System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
    NetworkCred.UserName = "sender@gmail.com";
    NetworkCred.Password = "password";
    smtp.Credentials = NetworkCred;
    smtp.EnableSsl = true;
    smtp.Port = 587;
    smtp.Send(mail);
}

【问题讨论】:

  • 在序列动作看起来很酷之前禁用/隐藏按钮!

标签: c# asp.net excel gridview extract-error-message


【解决方案1】:

dipra,我试图禁用查询按钮事件上的 excel/电子邮件按钮,但我无处可去,你能提供一些示例代码吗?

这是我的查询按钮

protected void ButtonQ1_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    SqlConnection connection = new SqlConnection(GetConnectionString());
    connection.Open();
    SqlCommand sqlCmd = new SqlCommand("SQL QUERY", connection);
    SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
    sqlDa.Fill(dt);
    if (dt.Rows.Count > 0)
    {
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
    connection.Close();
}

编辑:我想出了如何隐藏按钮,在 page_load 事件中我将按钮设置为不可见,并在每个查询按钮 onclick 事件中使它们可见。

但是我仍然无法让电子邮件按钮显示一条消息,告诉用户电子邮件已发送

编辑 2:知道了,我刚刚添加了发送电子邮件代码按钮

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "anything", "alert('Enviado com sucesso.');", true);

【讨论】:

    【解决方案2】:

    您可以尝试禁用导出和电子邮件按钮,并在查询按钮的单击事件中启用它们。如果您不想禁用它们,您可以设置一个隐藏字段,该字段将说明是否单击了“查询”按钮。在查询按钮的点击事件中,设置隐藏字段值。在“导出”和“电子邮件”按钮的ClientClick 事件上,编写一些 JScript,您可以在其中读取隐藏字段的值。如果该值对应于到目前为止尚未单击的查询按钮,则向用户显示一条警报消息。如果没有,请照常进行。

    对于电子邮件,请尝试以下代码:

    protected void Buttonmail_Click(object sender, EventArgs e)
    {
        try
        {
           fn_AttachGrid();
           Label1.Text="Email sent successfully";
        }
        catch(Exception ex)
        {
           Label1.Text = ex.ToString();
        }
    }
    

    点击电子邮件按钮时,fn_AttachGrid() 将被调用,如果它成功发送邮件,将在下一行向用户显示成功消息。如果有异常,将在 catch 块中捕获,并将异常消息显示给用户。附带说明一下,向用户显示自定义错误消息而不是默认异常消息并将异常记录在某处是个好主意。

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2014-09-21
      相关资源
      最近更新 更多