Отправить gridview в основах электронной почты C # - PullRequest
0 голосов
/ 11 апреля 2011

Я хотел бы создать письмо, в которое включен gridview. Я искал в Интернете и пробовал несколько решений. Но почему-то я неправильно понимаю или делаю что-то не так. С моим текущим кодом я получаю ошибку:

System.InvalidOperationException: Data source is an invalid type. It must be either 
an IListSource, IEnumerable, or IDataSource. 

Я читал об использовании StringBuilder, StringWriter, HtmlTextWriter, RenderControl и т. Д., Но все еще не могу понять, как заставить это работать.

Вот мой код:

        public void Email()
    {            
        string conn = "Data Source=pc-..";
        System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(conn);
        sqlConn.Open();
        SqlCommand sendGrid = new SqlCommand("SELECT * FROM tblSomething", sqlConn);

        GridView grd = new GridView();

        if (sendGrid != null)
        {
            grd.DataSource = sendGrid.ExecuteReader();
            grd.DataBind();
        }

        StringBuilder sb = new StringBuilder();

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

        MailMessage mail = new MailMessage();

        mail.To.Add("ToWhoEmail");
        mail.From = new MailAddress("FromWho");
        mail.Subject = "SubjectSomething";
        mail.IsBodyHtml = true;
        mail.BodyFormat = System.Net.Mail.MailMessage.IsBodyHtml.Html;
        // At this line above i get an error. He doesn't recognize BodyFormat = ...;
        // System.Web.Mail.MailFormat is obsolete.
        // The recommended alternative is: System.Net.Mail.MailMessage.IsBodyHtml
        mail.Body = sb.ToString();
        SmtpClient smtp = new SmtpClient("...");
        smtp.Send(mail);}

Я также попытался сделать gridview в другом файле cs и вызвать его с помощью: SendGrid.MakeGrid () в mail.Body = "..."; Но все, что я тогда получаю, это: System.Web.UI.WebControls.GridView в моей электронной почте. Вся помощь приветствуется, спасибо заранее.

С уважением, Мати

Ответы [ 3 ]

4 голосов
/ 11 апреля 2011

Проблема в этой строке:

grd.DataSource = sendGrid;

Вы пытаетесь использовать SqlCommand в качестве источника данных для вида сетки, что невозможно.Вы можете использовать устройство чтения данных или набор данных:

grd.DataSource = sendGrid.ExecuteReader();

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

2 голосов
/ 11 апреля 2011

в приведенном выше коде я не видел настроек smtp для отправки почты .... установите номер порта и учетные данные для доступа к серверу, такие как имя пользователя и пароль gmail и порт

smtp.gmail.com (использовать аутентификацию)

Использовать аутентификацию: Да

Порт для TLS / STARTTLS: 587

Порт для SSL: 465

1 голос
/ 11 апреля 2011

и для источника данных вида сетки, использующего sqlcommanad в качестве источника данных, неправильно использовать dataadapter ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...