好吧我有一个数据网格,它有一个按钮可以将数据导出到电子邮件中,它目前使用下面的代码创建一个新邮件,它会正确插入数据网格中显示的第一行但不插入任何其他行。 我假设我需要一个循环IE我的foreach语句(尽管是空的)需要在那里的东西,但我不能弄明白,已经卡住了几个小时)基本上我只是想循环显示从所述2列显示的所有行然后得到将它们放入变量中,然后使用它插入新邮件项目的主题体中......
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem mailItem = (MailItem)app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
foreach (DataGridViewRow rows in dataGridView2.SelectedRows)
{
}
var column1 = dataGridView2.Rows[0].Cells["dataGridViewTextBoxColumn2"].Value;
var column2 = dataGridView2.Rows[0].Cells["dataGridViewTextBoxColumn1"].Value;
mailItem.Body = column1.ToString() + " - " + column2.ToString();
mailItem.Subject = this.subjectText.Text;
mailItem.To = this.senderText.Text;
//mailItem.Attachment.Add(logPath);//logPath is a string holding path to the log.txt file
//mailItem.Importance = Microsoft.Office.Tools.Outlook.OlImportance.olImportanceHigh;
mailItem.Display(false);
答案 0 :(得分:2)
首先,如果要显示每一行,则需要将dataGridView2.SelectedRows
替换为dataGridView2.Rows
,然后在每次迭代时只获取column1和column2的值:
object column1 = "";
object column2 = "";
foreach (DataGridViewRow row in dataGridView2.Rows)
{
if(!item.IsNewRow)
{
column1 = item.Cells["dataGridViewTextBoxColumn1"].Value;
column2 = item.Cells["dataGridViewTextBoxColumn2"].Value;
mailItem.Body += column2 != null ? column2.ToString() : "" + " - " +
column1 != null ? column1.ToString() : "" + "\n";
}
答案 1 :(得分:0)
你可以这样做:
StringBuilder builder = new StringBuilder();
foreach (DataGridViewRow rows in dataGridView2.SelectedRows)
{
builder.AppendLine(
((rows.Cells["dataGridViewTextBoxColumn2"].Value == null) ? "" : rows.Cells["dataGridViewTextBoxColumn2"].Value.ToString()) +
" - " +
((rows.Cells["dataGridViewTextBoxColumn1"].Value == null) ? "" : rows.Cells["dataGridViewTextBoxColumn1"].Value.ToString()));
}
mailItem.Body = builder.ToString();
另外,如果可能,请尝试使用列索引。