【问题标题】:C# Datagrid send rows depends on cell value in HTMLC# Datagrid 发送行取决于 HTML 中的单元格值
【发布时间】:2017-09-22 14:02:11
【问题描述】:

Datagrid 有点问题。

数据网格取自 SQL ->

要点是:
- 第一列有数字,
- 最后一列(第 8 列)包含电子邮件。

我想通过 Outlook(正文中的表格)发送 HTML 正文,其中包含行中的数据列表,其中第一列(数字)相同,用于存储在 8 日的电子邮件。在循环中向每个号码发送分组信息。

现在我在每封电子邮件中使用单独的行,但我需要从第一列(行列表)配置每个值的组。在我的示例下方:

con.Open();
String query = "xxxxxxxx";
SqlDataAdapter SDA = new SqlDataAdapter(query, con);
DataTable dt = new DataTable();
SDA.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
for (int i = 0; i < DataGridView.Rows.Count; ++i)
{
    1 = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
    2 = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
    3 = Convert.ToString(dataGridView1.Rows[i].Cells[3].Value);
    4 = Convert.ToString(dataGridView1.Rows[i].Cells[5].Value);
    5 = Convert.ToDouble(dataGridView1.Rows[i].Cells[6].Value).ToString("N");
    6 = Convert.ToDouble(dataGridView1.Rows[i].Cells[7].Value).ToString("N");
    7 = Convert.ToDouble(dataGridView1.Rows[i].Cells[8].Value).ToString("N");
    Outlook.Application app = new Outlook.Application();
    Outlook.MailItem mailItem = app.CreateItem(Outlook.OlItemType.olMailItem);
    mailItem.Subject = "xxx" + 1 + "xxx" + 2 + "xxx";
    mailItem.To = "xxxx@xxxxx";
    mailItem.HTMLBody = "aaaaaaaaa" + 1 + "bb: " + 2 + "vvvv."
    mailItem.Importance = Outlook.OlImportance.olImportanceHigh;
    mailItem.Display(false);
    ((Outlook._MailItem)mailItem).Send();
}


我已经尝试过:

string mailBody = "<table width='100%' style='border:Solid 1px Black;'>";
foreach (DataGridViewRow row in dataGridView1.Rows)
{
    mailBody += "<tr>";
    foreach (DataGridViewCell cell in row.Cells)
    {
        mailBody += "<td style='color:blue;'>" + cell.Value + "</td>";
    }
    mailBody += "</tr>";
}
mailBody += "</table>";
mailItem.HTMLBody = mailBody;


但在这种风格中,我将完整的 DataGrid 放入了电子邮件中。
你能帮我怎么做吗?

【问题讨论】:

  • 很遗憾,由于提供的代码支离破碎且不完整,因此尚不完全清楚您要实现的目标、当前的体验或尝试过的目标。
  • 简而言之 - 我得到了数据网格。我想将成行的信息发送到定义的电子邮件。电子邮件的内容应该有来自数据网格的行,但通过第一列“分组”。因此,对于数字 1000130,我们在一封电子邮件中发送存在 1000130 的所有行。电子邮件存储在第 8 列。

标签: c# datagrid outlook


【解决方案1】:

试试这个...

DataTable dt = dataGridView1.DataSource as DataTable;
//assuming your first columns name is 1...
var groups = dt.AsEnumerable().GroupBy(x => x["1"]);

foreach (var group in groups)
{
   // create your mailItem instance....

   string mailBody = "<table width='100%' style='border:Solid 1px Black;'>";

   List<string> mailsToSend = new List<string>();

   foreach (var row in group)
   {
       mailBody += "<tr>";

       mailItem.Recipients.add(row.ItemArray[7].toString());

       foreach (var cell in row.ItemArray)
       {
          mailBody += "<td style='color:blue;'>" + cell.ToString() + "</td>";

       }
       mailBody += "</tr>";
   }

   mailBody += "</table>";
   mailItem.HTMLBody = mailBody;

   //Send your mail....
}

更新

您可以创建一个包含唯一邮件的邮件列表...

foreach (var group in groups)
{
     // create your mailItem instance....


     List<string> mailsToSend = new List<string>();

     string mailBody = "<table width='100%' style='border:Solid 1px Black;'>";

      foreach (var row in group)
      {
          mailBody += "<tr>";

          // if not in the list, simply add...
          if (!mailsToSend.Contains(row.ItemArray[7].ToString()))
          {
             mailsToSend.Add(row.ItemArray[7].ToString());
          }

          foreach (var cell in row.ItemArray)
          {
             mailBody += "<td style='color:blue;'>" + cell.ToString() + "</td>";
          }
          mailBody += "</tr>";
     }

     //fill your recipients from your mail list...
     foreach (var mail in mailsToSend)
     {
        mailItem.Recipients.Add(mail);
     }

     mailBody += "</table>";
     mailItem.HTMLBody = mailBody;

     //Send your mail....
}

更新

只需 7 个单元格...

foreach (var cell in row.ItemArray.Take(7))
{
    mailBody += "<td style='color:blue;'>" + cell.ToString() + "</td>";
}

【讨论】:

  • 完美运行!问题 - 如果我在一个组中有 10 行,并且所有组内的第 8 列中始终有相同的电子邮件,则不要向同一电子邮件发送 10 次相同的消息 - 我可以在一个 foreach 之前移动这个 mailItem 并且应该工作?还是更多?
  • 这对我的技能和软件很有帮助。最后一个问题 - 最后一列是电子邮件,但我不想在电子邮件正文中发送电子邮件地址,因为没有意义。我只能制作“array - 1”或类似的吗?为了更好地理解,我想取整行,就像是,但在正文中没有最后一列,但我需要这一列来发送电子邮件(以获取电子邮件地址)。
  • 嗨@Tom,很高兴为您提供帮助:)。我已经更新了您最后一个问题的答案...
  • 一切正常!本主题的最后一个帮助 - 如何将一封电子邮件中已发送电子邮件的摘要发送到定义的电子邮件地址。简而言之 - 制作并发送摘要脚本做了什么。
  • 摘要究竟包含什么?定义你的总结@Tom,也许是一个例子......
猜你喜欢
  • 2011-09-04
  • 2013-01-16
  • 2018-03-15
  • 2011-11-14
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多