C#Datagrid发送行取决于HTML中的单元格值
问题描述:
我对Datagrid有点问题。从SQL采取C#Datagrid发送行取决于HTML中的单元格值
的Datagrid - >
要点是:
- 用数字1列,
- 最后一列(8)与电子邮件。
我想通过Outlook(正文中的表格)发送HTML主体与行中的数据列表,其中第一列(数字)是相同的,对于存储在8日的电子邮件。在循环中将分组信息发送给每个号码。
现在我使用separatelly行每个电子邮件,但我需要配置每组值(从第1列(行列表))。下面我示例:
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 = "[email protected]";
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到电子邮件中。
你能帮我怎么做吗?
答
尝试......
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>";
}
不幸的是,它不是完全清楚你想什么来实现的,你正在经历,或者你已经尝试过什么,因为所提供的代码是零碎和不完整的。 –
简而言之 - 我得到了datagrid。我想将行中的信息发送给定义的电子邮件。电子邮件的内容应该包含来自数据网格的行,但通过第1列“分组”。因此,对于号码1000130,我们会在一封电子邮件中发送1000130存在的所有行。电子邮件存储在第8列。 – Tom