2017-09-21 62 views
1

我對Datagrid有點問題。從SQL採取C#Datagrid發送行取決於HTML中的單元格值

的Datagrid - >

MyDataGrid

要點是:
- 用數字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到電子郵件中。
你能幫我怎麼做嗎?

+1

不幸的是,它不是完全清楚你想什麼來實現的,你正在經歷,或者你已經嘗試過什麼,因爲所提供的代碼是零碎和不完整的。 –

+0

簡而言之 - 我得到了datagrid。我想將行中的信息發送給定義的電子郵件。電子郵件的內容應該包含來自數據網格的行,但通過第1列「分組」。因此,對於號碼1000130,我們會在一封電子郵件中發送1000130存在的所有行。電子郵件存儲在第8列。 – Tom

回答

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>"; 
} 
+0

完美的作品!問題 - 如果我在一個組中有10行,並且所有內部組在第8列內都有相同的電子郵件,則不會向同一電子郵件發送相同郵件的10次 - 我可以在一個foreach之前移動此郵件項並應該工作?還是更多? – Tom

+0

@Tom,我已經更新了我的答案。我希望這有助於... – caner

+0

這非常有幫助,並且提高了我的技能和軟件。最後一個問題 - 最後一欄是電子郵件,但我不想在電子郵件正文中發送電子郵件地址,因爲沒有意義。我只能像「陣列-1」或類似嗎?爲了更好地理解,我想採取整行,就像是,但沒有最後一列的身體,但我需要這個列發送電子郵件(採取電子郵件地址)。 – Tom

相關問題