現在の一連のイベントがあり、ユーザーは部門ページ (C# コードビハインドの aspx) を開き、多数のボタンが表示されます。
- クエリ結果を単一のグリッドビューに渡すクエリ ボタン (これは正常に機能します)
- クエリ ボタンと同じ数のメール ボタンを送信します (これも問題なく動作します)。
- クエリボタンを押した後、グリッドビューのコンテンツをExcelにエクスポートするExcelボタンにエクスポートします(これも正常に機能します)
しかし今、私はアプリのナビゲーションをよりプロフェッショナルなものにしようとしています。つまり、上記のように、ユーザーは最初にクエリ ボタンを押してから「エクスポート」または「メール」ボタンを押す必要があります。そうしないと、Excel ファイルがエクスポートされます。または添付が空であるため、ユーザーが最初に押したボタンがクエリ ボタンではない場合、他の 2 つのボタンは、ユーザーにクエリ ボタンを最初に押すように指示するエラー メッセージを表示する必要があります。また、ユーザーに通知するメッセージを表示したいと思います。電子メールが送信されたことを確認するには、CATCH と TRY を使用しますか? それとも、他のボタンを非表示にして、ユーザーがクエリ ボタンを押した後にのみ表示するのでしょうか? 私のボタンにはすでにcatchメソッドとtryメソッドがあるため、これを尋ねているだけなので、続行する方法がわかりません
私はac#の初心者なので、サンプルコードをいただければ幸いです
これが私のグリッドビューコードです
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
エクセルボタン
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);
}