我有当前的事件序列,用户打开一个部门页面(后面带有c#代码的aspx),并提供了大量的按钮:
但是现在我正在尝试让应用程序的导航更专业,即有错误消息,正如我上面提到的,用户必须先按查询按钮,然后按“导出”或“电子邮件”按钮,否则导出或附加的excel文件为空,因此如果用户按下的第一个按钮不是查询按钮,则其他2个按钮应该给出错误消息,告诉用户先按查询按钮,我还要显示一条消息告诉用户电子邮件已发送,我是否用CATCH完成此操作并尝试?或者可能隐藏其他按钮,只在用户按下查询按钮后显示它们?我只是问这个,因为我的按钮已经有捕获并尝试方法,因此我不知道如何继续
我会很感激一些示例代码'因为我是c#新手
这是我的gridview代码
<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);
}
答案 0 :(得分:1)
dipra,我试图在查询按钮事件上禁用excel / email按钮,但我无处可去,你能提供一些示例代码吗?
这是我的查询按钮
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事件中,我将按钮设置为不可见,并在每个查询按钮上点击事件,让它们可见。
但是我仍然无法通过电子邮件按钮显示一条消息,告诉用户已发送电子邮件
编辑2:得到它,我刚刚添加了发送电子邮件代码按钮
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "anything", "alert('Enviado com sucesso.');", true);
答案 1 :(得分:0)
您可以尝试禁用“导出”和“电子邮件”按钮,并在“查询”按钮的单击事件中启用它们。如果您不想禁用它们,可以设置一个隐藏字段,说明是否单击了“查询”按钮。在“查询”按钮的单击事件中,设置隐藏字段值。在导出和电子邮件按钮的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块中,并向用户显示异常消息。作为旁注,最好向用户显示自定义错误消息而不是默认异常消息,并在某处记录异常。