只触发一个附件而不是许多记录

时间:2016-07-28 12:18:15

标签: c# asp.net

我有一个代码,其中有来自SP的 79 记录。我想将附件发送给用户而不管其数据。但只有第79次记录作为附件发送给每个用户。我不知道为什么。

private void Form1_Load(object sender, EventArgs e)
    {
        Cls_Email_Sql ce = new Cls_Email_Sql();
        List<string> ls_attach = new List<string>();
        using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(SqlConn))
        {
            using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
            {
                cmd.CommandText = "GET_INWARD_REMINDER_REPORT";
                cmd.Connection = conn;
                cmd.CommandType = CommandType.StoredProcedure;
                conn.Open();
                System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                conn.Close();
                DataTable tb_RA = ds.Tables[0];
                DataTable tb_User = ds.Tables[1];

                string strcolorHead = "#C0C0C0";
                string strcolorDet = "#C0C0C0";

                var groups = tb_RA.AsEnumerable().GroupBy(r => r.Field<string>("RAName"));

                foreach (var group in groups)   // RA Table
                {
                    sbodyMail = "Dear " + group.Key + ", <br /><br />  " +

                    "As per the details available in the system, below are the summary  "+
                    "of number of documents lying with your reportees for more than five days. "+
                    "This is for your information and necessary action ";

                    sbodyMail += "<table style='width: 400px;font-size:12px;font-family: Arial, Helvetica, sans-serif;' " +
                                "border='0'><tr><td style='width: 100%;'></b><td></tr></table> " +

                                "<table style='width: 470px;font-size:12px; font-family: Arial, Helvetica, sans-serif;height: 53px' border='1'><tr> " +
                                "<td style='width: 30px; height: 14px;color:black;background-color:" + strcolorHead + " ;white-space:nowrap'><strong>SR No</strong></td> " +
                                    "<td style='width: 300px; height: 14px;color:black;background-color:" + strcolorHead + " ;white-space:nowrap'><strong>UserName</strong></td> " +
                                "<td style='width: 120px; height: 14px;color:black;background-color:" + strcolorHead + " ;white-space:nowrap'><strong>Document type</strong></td> " +
                                    "<td style='width: 20px; height: 14px;color:black;background-color:" + strcolorHead + " ;white-space:nowrap'><strong><div>No. of docs working </div><div> for more than five days</div></strong></td> ";

                    foreach (var row in group)
                    {
                        sbodyMail += "<tr>" +
                            "<td style='width: 30px; height: 14px;background-color:" + strcolorDet + "'>" + row["SR_No"].ToString() + " </td> " +
                            "<td style='width: 100px; height: 14px;background-color:" + strcolorDet + "'>" + row["userName"].ToString() + " </td> " +
                            "<td style='width: 100px; height: 14px;background-color:" + strcolorDet + "'>" + row["Document_Type"].ToString() + " </td> " +
                            "<td style='width: 100px; height: 14px;background-color:" + strcolorDet + "'>" + row["CountofDocNo"].ToString() + " </td> " +
                            "</tr>";
                    }
                    sbodyMail += "</table><br>" + //close of header

                     "<b>THIS IS A SYSTEM GENERATED MAIL. PLEASE DO NOT REPLY </b>";
                    string startupPath = "";
                    List<string> ls_attach1 = new List<string>();

                    MailMessage mail = new MailMessage();
                    startupPath = Environment.CurrentDirectory;
                    ls_attach1.Add(startupPath + "\\Attachment\\Reminder_Sheet.xls");

                    string strExp = "";
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        strExp = "RAName = '" + ds.Tables[0].Rows[i]["RAName"].ToString() + "'";
                        DataRow[] dr = ds.Tables[0].Select(strExp);
                        ds.Tables[0].AcceptChanges(); 
                        DataTable dtNew = ds.Tables[0].Select(strExp).CopyToDataTable();
                        DataSet dsNew = new System.Data.DataSet();
                        dsNew.Tables.Add(dtNew);
                        ExcelLibrary.DataSetHelper.CreateWorkbook(startupPath + "\\Attachment\\Reminder_Sheet.xls", dsNew);
                    }
                    foreach (var attach in ls_attach1)
                    {
                        mail.Attachments.Add(new Attachment(attach));
                    }
                    foreach (Attachment attachments in mail.Attachments)
                    {
                        attachments.Dispose();
                    }
                    ce.SendEmail("test@test.com", "", "", "Information on documents for processing", sbodyMail,"AUTOSQL", "Powersoft", ls_attach1, "ConnectionString");
                }
            }
        }
    }

at

ds.Tables[0].Rows.Count 

我得到79条记录。但附件仅限于第79条记录。

1 个答案:

答案 0 :(得分:1)

如果您希望人们通过它阅读,您通常应该在没有业务逻辑的情况下生成更简单的问题示例。那就是说,你的问题是这一行:

ExcelLibrary.DataSetHelper.CreateWorkbook(startupPath + "\\Attachment\\Reminder_Sheet.xls", dsNew);

查看您正在使用的库的源代码,它会使用Microsoft的Workbook.Save()将您提供的数据集保存到工作簿中。如果你为你想要的每个DataSet(我认为你是代码)调用它,你将把它们全部保存到同一条路径,覆盖每一个。

这意味着,在循环显示79个报告后,您将覆盖每个报告,并留下文件中的最后一个报告。您应该找到一种方法将它们全部加载到书中的单独工作表中,或者将它们保存到不同的文件中。