2014-08-28 38 views
0

我目前正在解決一段時間我有一個C#Winform應用程序的問題。我有一個數據網格,通過查詢填充信息。一切都運行良好,winform的用戶可以「勾選」將通過電子郵件發送到其他地方的相關行。我遇到的問題是,目前所有行都會包含在電子郵件中,無論是否打勾。我只想將被打勾的行發送到電子郵件,其餘的被忽略。我覺得像我靠近,我的代碼如下:發送一個datagridview中的選定行到電子郵件

private void btnEmailReg_Click(object sender, EventArgs e) 
    { 
     Cursor.Current = Cursors.WaitCursor; 
     try 
     { 
      SmtpClient client = new SmtpClient("smtpclient"); 
      MailMessage message = new MailMessage(); 
      message.From = new MailAddress("address"); 
      string mailBox = cmbExamTeamReg.Text.Trim(); 
      message.To.Add(mailBox); 
      string mailFrom = txtEmailFromReg.Text.Trim(); 
      message.CC.Add(mailFrom); 
      string mailCC = txtMailCCReg.Text.Trim(); 
      message.Bcc.Add(mailCC); 
      File.Delete("Registration_Result.xls"); 
      StreamWriter sw = new StreamWriter("Registration Result.xls", false, Encoding.UTF8); 
      sw.Write(htmlMessageBodyReg().ToString()); 
      sw.Close(); 
      Attachment myAttach = new Attachment("Registration Result.xls"); 
      message.Attachments.Add(myAttach); 
      message.IsBodyHtml = true; 
      message.Body = "Registration request, please see following details: " + "\n" + "<br>" + 
       "Exam Team member: " + cmbExamTeamReg.Text + 
       "\n" + "<br>" + "Course Tutor: " + txtCourseTutorReg.Text + 
       "\n" + "<br>" + "Award & Complex Number: " + txtAwardCompReg.Text + 
       "\n" + "<br>" + "Comments: " + rtextCommentsReg.Text; 
      message.Subject = "Registration Request"; 
      client.Credentials = new System.Net.NetworkCredential("credentials); 
      client.Port = System.Convert.ToInt32(25); 
      for (int i = 0; i < this.dgCourseStudentsReg.Rows.Count; i++) 
      { 
       if (dgCourseStudentsReg.Rows[i].Cells[0].Value.ToString() == "True") 
       { 
        for (int j = 1; j < this.dgCourseStudentsReg.Columns.Count; j++) 
        { 
         message.Body = message.Body + "\n" + "<br>" + this.dgCourseStudentsReg.Rows[i].Cells[j].Value; 
        } 

        dgCourseStudentsReg.Rows[i].Selected = true; 
        dgCourseStudentsReg.Rows[i].Visible = true; 
       } 
       else 
       { 
        dgCourseStudentsReg.CurrentCell = null; 
        dgCourseStudentsReg.Rows[i].Selected = false; 
        dgCourseStudentsReg.Rows[i].Visible = false; 
       } 
      }   
      client.Send(message); 
      new Endpage().Show(); 
      this.Close(); 
     } 
     catch 
     { 
      MessageBox.Show("Please check all required fields are complete"); 
     } 
    } 

我也一直在通過這一工作與專家交流的一些幫助,問題都可以找到here更多的細節;

就目前來看,如果我改變某些東西(所有行都經過)或給出一個錯誤(到目前爲止話題末尾的最詳細的步驟),或者如果它改變了工作,它只會隱藏選定的行而不是電子郵件。

回答

0

你需要下載數據,然後選擇要通過電子郵件發送,然後單擊電子郵件按鈕在DataGridView行,我寫的代碼儘可能簡單,你如下:

private void Form1_Load(object sender, EventArgs e) 
{ 
DataTable dt = new DataTable(); 

dt.Columns.Add("Id"); 
dt.Columns.Add("Student Name"); 
dt.Columns.Add("Address"); 
dt.Columns.Add("Course"); 


dt.Rows.Add("1", "Heisenberg", "123 Somwhere Lane, Alburque, NM-12345", "Chemistry101"); 

dt.Rows.Add("2", "Jesse Pinkman", "N/A", "Meth101"); 

dt.Rows.Add("3", "Hank" , "N/A 2", "DEA101"); 

dt.Rows.Add("4", "Guss Fring", "Los Pollos Hermanos", "ChickenMaking102"); 

dt.Rows.Add("5", "John Smith", "123 Nowhere Lane, Nowhereland, NW-12345", "English101"); 


dataGridView1.DataSource = dt; 
} 





    private void btnEmail_Click(object sender, EventArgs e) 
    { 
     foreach (DataGridViewRow row in dataGridView1.SelectedRows) 
     { 
      string value1 = row.Cells[0].Value.ToString(); 
      string value2 = row.Cells[1].Value.ToString(); 
      string value3 = row.Cells[2].Value.ToString(); 
      string value4 = row.Cells[3].Value.ToString(); 

      this.Cursor = Cursors.WaitCursor; 


      SmtpClient client = new SmtpClient("smtpclient"); 


      // Specify the e-mail sender. 
      var from = new MailAddress("[email protected]"); 

      // Set destinations for the e-mail message. 
      var sendTo = "[email protected]"; 

      // Specify the message content. 
      var message = new MailMessage(); 

      message.From = from; 

      message.To.Add(sendTo); 

      message.Body = "<b>EMAIL MESSAGE</b><br/>" + "Put your email here!<br/> " + value1 + " " + value2 + " " + value3 + " " + value4; 

      message.Subject = "Your email subject goes here!"; 

      message.IsBodyHtml = true; 

      client.Send(message); 

      // Clean up. 
      message.Dispose(); 

      MessageBox.Show("Email Notification Sent!", "Message Sent", MessageBoxButtons.OK, 
          MessageBoxIcon.Information); 

      this.Cursor = Cursors.Default; 

     } 

    } 
+0

喜Charles,感謝這個,但是數據是通過查詢加載的,所以硬編碼值不起作用。 – Richard 2014-08-28 16:01:23

+0

這只是一個例子,你應該用這種方法來處理你的數據。 – CharlesMighty 2014-08-28 17:20:09

+0

我明白,但是這種方法是行不通的。我無法預測哪些行將被選中,哪些數據作爲應用程序將被不同的用戶在不同的時間使用。 – Richard 2014-08-29 08:07:54