Добавить gridviewRow в gridview на элемент управления электронной почтой - PullRequest
0 голосов
/ 20 апреля 2011

Я пытаюсь контролировать, есть ли уже адрес электронной почты в списке, и если это так, я бы хотел добавить строку из вида сетки в новый вид сетки, который будет отправлен на эту учетную запись электронной почты.

У меня есть код для получения строк и отправки их на адрес электронной почты.Но проблема в том, что он отправляет только 1 строку на адрес электронной почты, хотя несколько строк для этого адреса были проверены.

Смотрите здесь мой код:

protected void ButtonATH_Click(object sender, EventArgs e)
    {
        List<string> lst = new List<string>();
        for (int i = 0; i < GridViewBestelling.Rows.Count; i++)
        {
            CheckBox ck = (CheckBox)GridViewBestelling.Rows[i].Cells[0].FindControl("CheckBoxAfTeHalen");
            Label bestelID = (Label)GridViewBestelling.Rows[i].Cells[5].FindControl("LabelBestelID");
            Label lblUsrE = (Label)GridViewBestelling.Rows[i].Cells[7].FindControl("LabelEmailGeb");
            string emadr = lblUsrE.Text.ToString();
            string conn = "Data Source=pc-...";

            GridView grd = new GridView();

         if (ck.Checked)
            {
                System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(conn);
                sqlConn.Open();
                System.Data.SqlClient.SqlCommand updateCommand = new System.Data.SqlClient.SqlCommand("UPDATE tblBestelling SET tBestAfTeHalen = '" + ck.Checked + "' WHERE tBestId= '" + bestelID.Text + "'", sqlConn);
                updateCommand.Parameters.AddWithValue("@bestID", bestelID.Text);
                updateCommand.ExecuteNonQuery();

                LabelSendGridBoven.Text = "<b>Hello: <br /><br /> ";
                LabelSendGridBoven.Visible = false;

                LabelHoeveelheid.Text = "<br /><br /> Amount" ;
                LabelHoeveelheid.Visible = false;

                LabelSendGridTussen.Text = "Regards";
                LabelSendGridTussen.Visible = false;

                LabelSendGridOnder.Text = "<br /><br />----------------------" ;
                LabelSendGridOnder.Visible = false;

                DataTable dt = new DataTable();
                DataRow dr;

                dt.Columns.Add(new DataColumn("B_ID"));
                dt.Columns.Add(new DataColumn("P"));
                dt.Columns.Add(new DataColumn("M"));
                dt.Columns.Add(new DataColumn("H"));

                dr = dt.NewRow();
                dr["B_ID"] = ((Label)GridViewBestelling.Rows[i].Cells[5].FindControl("LabelBestelID")).Text;
                dr["P"] = ((Label)GridViewBestelling.Rows[i].Cells[8].FindControl("LabelProduct_naam")).Text;
                dr["M"] = ((Label)GridViewBestelling.Rows[i].Cells[9].FindControl("LabelManufact_Nr")).Text;
                dr["H"] = ((Label)GridViewBestelling.Rows[i].Cells[3].FindControl("LabelHoeveelheid")).Text;
                dt.Rows.Add(dr);

                grd.DataSource = dt;
                grd.DataBind();

                StringBuilder sb = new StringBuilder();
                StringWriter sw = new StringWriter(sb);
                HtmlTextWriter htw = new HtmlTextWriter(sw);
                grd.RenderControl(htw);

              if ( !lst.Contains(emadr))
              {
                  lst.Add(emadr);

                  System.Data.SqlClient.SqlConnection sqlConn2 = new System.Data.SqlClient.SqlConnection(conn);
                  sqlConn2.Open();
                  System.Data.SqlClient.SqlCommand updateCommand2 = new System.Data.SqlClient.SqlCommand("UPDATE tblBestelling SET Status=@statusChange WHERE tBestId= '" + bestelID.Text + "'", sqlConn2);
                  updateCommand2.Parameters.AddWithValue("@statusChange", statusChange.ToString());
                  updateCommand2.Parameters.AddWithValue("@bestID", bestelID.Text);
                  updateCommand2.ExecuteNonQuery();
                  sqlConn2.Close();

                    try
                    {
                        MailMessage mail = new MailMessage();
                        mail.To.Add(emadr.ToString());
                        mail.Bcc.Add("SomeoneBcc");
                        mail.From = new MailAddress("FromWho");
                        mail.Subject = "SomeSubject";
                        string Body = LabelSendGridBoven.Text + sb.ToString() + LabelHoeveelheid.Text + LabelSendGridTussen.Text + "<br /><img alt=\"\" hspace=0 src=\"cid:imageId\" align=baseline border=0 >" + LabelSendGridOnder.Text + "<BR>";

                        AlternateView htmlView = AlternateView.CreateAlternateViewFromString(Body, null, "text/html");
                        LinkedResource imagelink = new LinkedResource(Server.MapPath(".") + @"\logo\Logo.jpg");
                        imagelink.ContentId = "imageId";
                        imagelink.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
                        htmlView.LinkedResources.Add(imagelink);
                        mail.AlternateViews.Add(htmlView);
                        SmtpClient smtp = new SmtpClient("..server..");
                        smtp.Send(mail);
                    }
                    catch (Exception ex)
                    {
                        Response.Write(ex.Message);
                    }
                }
            }
        }
    }

В результате получается 1 электронное письмо на каждую учетную запись электронной почты, которое было проверено со всеми строками, но мне бы хотелось, чтобы только строки соответствовали адресу электронной почты.1008 *

Кто-нибудь, пожалуйста, идея?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2011

Я думаю, что вы делаете что-то не так здесь

if (lst.Contains(emadr).ToString() == emadr.ToString())
  {...}

lst.Contains (emadr) .ToString () будет истинным или ложным и никогда не будет соответствовать адресу электронной почты вmemeber emadr

Из упомянутых комментариев вы должны использовать

if (lst.Contains(emadr))
{
//your logic
}
0 голосов
/ 20 апреля 2011
lst.Contains(emadr).ToString() == emadr.ToString()

Ну lst.Contains() возвращает bool, который вы конвертируете в строку, поэтому, если ваше электронное письмо не выглядит как true или false, оно не будет работать

Почему бы просто не использовать:

if(lst.Contains(emadr))
{...}
...