2017-09-19 4 views
0

J'ai un DataGridView qui est supprimé de la boîte à outils (VS2015). Je dois sélectionner des lignes identiques en fonction de la colonne Commande client et envoyer un e-mail: Datagridview with similar columnsSélectionnez plusieurs lignes dans datagridview en fonction de la valeur de la cellule et de l'adresse e-mail.

Donc; Si je sélectionne une ligne basée sur l'identifiant unique (Elément de ligne), je souhaite trouver toutes les lignes ayant le même numéro de commande client et envoyer par courrier électronique les informations contenues dans ces lignes. Comme vous pouvez le voir, il peut y avoir une ligne sans commande client correspondante ou il peut y en avoir plusieurs. Ce que je voudrais, c'est une suggestion sur le code pour sélectionner les lignes multiples (similaires) et une suggestion sur la façon d'ajouter toutes ces informations dans le courrier électronique. J'ai quelques extraits de code pour faire une seule sélection.

private void salesOrdersDataGridView_CellContentClick(object sender, 
DataGridViewCellEventArgs e) 
    { 

     if (e.RowIndex > -1) 
     { 
      DataGridViewRow row = salesOrdersDataGridView.Rows[e.RowIndex]; 
      string cpn = ""; 
      cpn = salesOrdersDataGridView.Rows[e.RowIndex].Cells["cpn"].Value.ToString(); 
      lblCpn.Text = cpn; 
      lblCpn.Visible = true; 
      string ordnum = ""; 
      ordnum = salesOrdersDataGridView.Rows[e.RowIndex].Cells["SalesOrder"].Value.ToString(); 
      lblOrder.Text = ordnum; 
      lblOrder.Visible = true; 
      string pnum = ""; 
      pnum = salesOrdersDataGridView.Rows[e.RowIndex].Cells["partno"].Value.ToString(); 
      lblPN.Text = pnum; 
      lblPN.Visible = true; 
      lblPN.ForeColor = Color.FromArgb(0, 192, 0); 
      string desc = ""; 
      desc = salesOrdersDataGridView.Rows[e.RowIndex].Cells["descript"].Value.ToString(); 
      lblDesc.Text = desc; 
      lblDesc.Visible = true; 
      string quant = ""; 
      quant = salesOrdersDataGridView.Rows[e.RowIndex].Cells["qty"].Value.ToString(); 
      lblQty.Text = quant; 
      lblQty.Visible = true; 
      string cpo = ""; 
      cpo = salesOrdersDataGridView.Rows[e.RowIndex].Cells["cpo"].Value.ToString(); 
      lblPO.Text = cpo; 
      lblPO.Visible = true; 
      string rev = ""; 
      rev = salesOrdersDataGridView.Rows[e.RowIndex].Cells["crev"].Value.ToString(); 
      lblRev.Text = rev; 
      lblRev.Visible = true; 
      lblRev.ForeColor = Color.FromArgb(0, 192, 0); 
      DateTime shp = DateTime.Parse(salesOrdersDataGridView.Rows[e.RowIndex].Cells["shipDate"].Value.ToString()); 
      lblshp.Text = shp.ToString("MM/dd/yyyy"); 
      lblshp.Visible = true; 
      string eml = ""; 
      eml = salesOrdersDataGridView.Rows[e.RowIndex].Cells["email"].Value.ToString(); 
      lblEmail.Text = eml; 
      lblEmail.Visible = true; 

Comme vous pouvez le voir, je suis en train d'écrire sur les étiquettes (ce qui est que l'utilisateur puisse vérifier les informations que je puis ajouter que au courrier électronique (Outlook):

private void btnAck_Click(object sender, EventArgs e) 
    { 
    try 
     { 


      //Must add Outlook Reference Object Library 


      Outlook.Application _app = new Outlook.Application(); 
      Outlook.MailItem mail = (Outlook.MailItem)_app.CreateItem(Outlook.OlItemType.olMailItem); 

      mail.To = lblEmail.Text; 
      mail.BCC = ";[email protected]"; 
      mail.Subject = "Order Acknowledgement for your PO " + lblPO.Text; 
      mail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML; 
      mail.HTMLBody = "<HTML><BODY>"; 
      mail.HTMLBody += "Thank you for your order!" + "<br />" + "<br />" + "Touchstone Order Number: " + lblOrder.Text + 
      "<br />" + " Part Number: " + lblPN.Text + "<br />" + "Description:" + lblDesc.Text + "<br />" + "Customer Part Number: " + " " + 
      lblCpn.Text + "-" + " Revision: " + lblRev.Text + "<br />" + "Expected Ship Date: " + lblshp.Text + 
      "<br />" + "Quantity: " + lblQty.Text + "<br />" + "<br />" + "Regards," + "<br />" + 
      "<br />" + "Customer Service" + "<br />" + "Touchstone Technology, Inc." + "<br />" + "address." + 
      "<br />" + "more address" + "<br />" + "Phone: phone number"; 

      mail.HTMLBody += "<p>Web: <a href='http://www.web'>web</a></p></body></html>"; 
      mail.Display(true); 
      // mail.Send(); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 

Je dépouillèrent ce que je pensais était pas nécessaire - s'il vous plaît ne hésitez pas à poser toutes les questions que je ne suis pas sûr de savoir comment clarifier ce que je dois Merci pour les réponses rapides habituelles et aider

+0

S'il vous plaît utiliser [chaînes interpolées] (https://docs.microsoft.com/en-us/dotnet/ csharp/langue-référence/mots-clés/chaînes interpolées). (en C# 6 c'est beaucoup plus clair à lire) – SeM

Répondre

0

j'ai pu. pour obtenir ce dont j'avais besoin en faisant juste une requête directe (ne pas écrire dans une vue de données). cet exemple de code aide quelqu'un d'autre:

string ord = ""; 
     string pn = ""; 
     string des = ""; 
     string cpn = ""; 
     string rev = ""; 
     string esd = ""; 
     string qty = ""; 
     string eml = ""; 
     string sbj = ""; 

     string str = @"Data Source=my data source;Initial Catalog=my table;Integrated Security=True"; 
     SqlConnection scn; 
     SqlDataAdapter da; 
     DataSet ds; 


     salesOrdersTableAdapter.SO(_TST_TWIDataSet.SalesOrders); 


     scn = new SqlConnection(str); 
     da = new SqlDataAdapter("SELECT DISTINCT DATEADD (dd, DATEDIFF(dd,0,ShipDate),0) AS ShipDate,RTRIM(SalesOrder) AS [Sales Order], RTRIM(PartNum) AS [Part Number]," + 
      "RTRIM(Description) AS Description,RTRIM(DueQty) AS Quantity,RTRIM(CustPartNum) AS[Customer Part No], RTRIM(CustPo) AS[Customer PO], " + 
           "RTRIM(CustRev) AS[Customer Rev], RTRIM(email) AS [Email] " + 
           "FROM SalesOrders WHERE Ack <> 'Y'AND SalesOrder =" + MyGlobals.ord, scn); 
     ds = new DataSet();da.Fill(ds, "SalesOrders"); 
     foreach(DataRow Row in ds.Tables["SalesOrders"].Rows) 
     { 
      ord = ord + " Order Number "+ Row["Sales Order"]; 
      pn = pn + " Part Number: " + Row["Part Number"]; 
      des = des + "Description: " + Row["Description"]; 
      cpn = cpn + "Customer Part Number: " + Row["Customer Part No"]; 
      rev = rev + "Customer Revision: " + Row["Customer Rev"]; 
      DateTime dte = DateTime.Now;    
      esd = esd + "Expected Ship Date: " + dte.ToShortDateString(); 
      qty = qty + "Quantity: " + Row["Quantity"]; 
      eml = eml + Row["Email"]; 
      sbj = sbj + "Order Acknowledgement for your PO " + Row["Customer PO"]; 
     } 

Je suffit de brancher les variables dans mon code email