0

現在の一連のイベントがあり、ユーザーは部門ページ (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);
}
4

2 に答える 2

1

dipra、クエリ ボタン イベントで Excel/E メール ボタンを無効にしようとしましたが、どこにも行きませんでした。サンプル コードを提供してもらえますか?

ここに私のクエリボタンがあります

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);
于 2013-11-20T15:41:30.870 に答える