2009-12-14 5 views
0

전자 메일에서 GridView 또는 DataTable을 보내는 가장 좋은 방법을 찾으려고합니다. 코드 뒤에전자 메일을 통해 GridViews/DataTables 보내기

페이지 :

protected void Page_Load(object sender, EventArgs e) 
{ 
DataTable s1 = Sql.specificReportData(Convert.ToInt32(Session["userID"])); 
this.gv.DataSource = s1.DefaultView; 
this.gv.DataBind(); 
} 

이 생성하고 데이터를 성공적으로 결합,하지만 난 HTML 인코딩 된 이메일에 GV의 내용을 시도하고 추가하는 경우 다음 전자 메일의 GV 부분이 비어 있습니다. HTML을 준수하도록 GridView를 변경해야합니까? 나는 이것을하는 방법의 예를 찾을 수 없다. 어떤 도움을 주셔서 감사합니다.

편집 : 솔라 야아에게 답을주었습니다. 그는 솔러 레이아에게 더 좋은 예를 보여주었습니다. 물체의 물줄기와 처분도있었습니다. 둘 다이 시도

+0

가 어떻게 GV의 내용을지고있다? –

+0

gv를 문자열로 변환하려고 시도하고이를 전자 메일의 내용으로 사용 된 stringbuilder에 연결했습니다. 나는 그것이 작동하기를 기대하지는 않았지만, gv가 HTML로 렌더링되는 시점이나 이메일 전송을 위해 준비하는 것이 가장 좋은 방법인지는 확실하지 않았습니다. – Alex

답변

4

페이지

protected void Button1_Click(object sender, EventArgs e) 
    { 
     Label1.Text = getHTML(GridView1); 
    } 

    private string getHTML(GridView gv) 
    { 
     StringBuilder sb = new StringBuilder(); 
     StringWriter textwriter = new StringWriter(sb); 
     HtmlTextWriter htmlwriter = new HtmlTextWriter(textwriter); 
     gv.RenderControl(htmlwriter); 
     htmlwriter.Flush(); 
     textwriter.Flush(); 
     htmlwriter.Dispose(); 
     textwriter.Dispose(); 
     return sb.ToString(); 
    } 

    public override void VerifyRenderingInServerForm(Control control) 
    { 
     return; 
    } 

페이지 코드

<form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"> 
      <Columns> 
       <asp:BoundField DataField="UserID" HeaderText="UserID" SortExpression="UserID" /> 
       <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
       <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> 
      </Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
      SelectCommand="SELECT [UserID], [Name], [Email] FROM [WEB_Users] WHERE ([Name] LIKE '%' + @Name + '%')"> 
      <SelectParameters> 
       <asp:Parameter DefaultValue="%Moha%" Name="Name" Type="String" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
     <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
     <br /> 
     <br /> 
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div> 
    </form> 
+0

이 중요한 데이터 바인딩 무엇입니까? 이미 pageload에서 데이터 바인딩을하고 있기 때문입니다. 데이터 소스없이 실행하고 코드 줄 sb가 null 인 경우 Gridview를 전달할 때도 데이터가 들어 있습니다. – Alex

+0

데이터와 함께 Gridview를 보내는 경우 바인딩됩니다. 데이터를 다시 바인딩 할 필요가 없습니다. 그냥 렌더링하고 반환하십시오. – solairaja

+0

gv가 구조 및 데이터를 디버깅 모드에서 먼저 확인하십시오. ur가 GetHTML Method를 호출 할 때. – solairaja

1

하이 알렉스 도움으로

Try this (C#): 

는 System.IO를 사용하여, 두 응답을 표시; using System.Text; using System.Net.Mail; 코드 뒤에

private string GridViewToHtml(GridView gv) 
{ 
    StringBuilder sb = new StringBuilder(); 
    StringWriter sw = new StringWriter(sb); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 
    gv.RenderControl(hw); 
    return sb.ToString(); 
} 

protected void SendMailButton_Click(object sender, EventArgs e) 
{ 
    MailMessage mail = new MailMessage(); 
    mail.Body = GridViewToHtml(GridView1); 
    mail.IsBodyHtml = true; 
    ...... 
} 
public override void VerifyRenderingInServerForm(Control control) 
{ 

} 
+0

감사합니다. Pandiya. 그냥 시도했지만 불행히도 이메일이 비어 있습니다. 디버깅 및 StringBuilder sb 다시 전달 될 때 비어 있습니다. 내가 전달하는 Gridview 확실히 렌더링되고 null이되지 않습니다 – Alex

+0

알렉스이 시도해보십시오 http://fredrik.nsquared2.com/viewpost.aspx?PostID=412 –

-1

의 StringBuilder 그것을하지 않는 경우, 다음 코드를 시도 :

protected void btnConfirmation_Click(object sender, EventArgs e) 
{ 
    int rowcount = 0; 
    foreach (GridViewRow row in GridView2.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      rowcount++; 
     } 
    } 

    string strHTML = "<html><STYLE='font-size: 12px;'>" + 
       "<body>" + 
       "<table border='1'>" + 
       "<thead>" + 
        "<tr>" + 
        "<th>OrderDetail ID</th>" + 
        "<th>Order ID</th>" + 
        "<th>User Name</th>" + 
        "<th>Product ID</th>" + 
        "<th>Quantity</th>" + 
        "<th>Unit Price</th>" + 
        "<th>Shipping Costs</th>" + 
        "</tr>" + 
       "</thead>"; 
    for (int a = 0; a < rowcount; a = a + 1) 
    { 
     strHTML = strHTML + "<tr>"; 
     for (int b = 0; b < 7; b = b + 1) 
      { 
       strHTML = strHTML + "<td>" + GridView2.Rows[a].Cells[b].Text + "</td>"; 
      } 
    } 
    strHTML = strHTML + "</tr></table>"; 
    strHTML = strHTML + "<br/><br/><br/>" + 
       "<table>" + 
       "<tr><td> Order ID <td/><td> " + GridView3.Rows[0].Cells[0].Text + 
       "<tr><td> Order Date <td/><td> " + GridView3.Rows[0].Cells[1].Text + 
       "<tr><td> User Name <td/><td> " + GridView3.Rows[0].Cells[2].Text + 
       "<tr><td> Firstname <td/><td> " + GridView3.Rows[0].Cells[3].Text + 
       "<tr><td> Lastname <td/><td> " + GridView3.Rows[0].Cells[4].Text + 
       "<tr><td> Address <td/><td> " + GridView3.Rows[0].Cells[5].Text + 
       "<tr><td> City <td/><td> " + GridView3.Rows[0].Cells[6].Text + 
       "<tr><td> State <td/><td> " + GridView3.Rows[0].Cells[7].Text + 
       "<tr><td> PostalCode <td/><td> " + GridView3.Rows[0].Cells[8].Text + 
       "<tr><td> Country <td/><td> " + GridView3.Rows[0].Cells[9].Text + 
       "<tr><td> Phone <td/><td> " + GridView3.Rows[0].Cells[10].Text + 
       "<tr><td> Email <td/><td> " + GridView3.Rows[0].Cells[11].Text + 
       "<tr><td> Total <td/><td> " + GridView3.Rows[0].Cells[12].Text + 
       "<tr><td> Payment Transaction ID <td/><td> " + GridView3.Rows[0].Cells[13].Text + 
       "<tr><td> Has Been Shipped <td/><td> " + GridView3.Rows[0].Cells[14].Text; 
    string strTo = "[email protected]"; 
    string strSubject = "Expedition."; 
    SendingMail(strHTML, strTo, strSubject); 
} 

protected void btnExpedition_Click(object sender, EventArgs e) 
{ 
    string Firstname = GridView3.Rows[0].Cells[3].Text; 
    string Lastname = GridView3.Rows[0].Cells[4].Text; 
    string Address = GridView3.Rows[0].Cells[5].Text; 
    string City = GridView3.Rows[0].Cells[6].Text; 
    string State = GridView3.Rows[0].Cells[7].Text; 
    string PostalCode = GridView3.Rows[0].Cells[8].Text; 
    string Country = GridView3.Rows[0].Cells[9].Text; 
    string strSpaces = "&#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32; &#32;"; 
    string html = "<!DOCTYPE html>" + 
        "<html lang='en'>" + 
        "<body><meta charset='utf-8' />" + 
        "<div><label>xxx</label></div>" + 
        "<div><label>xxxxxxxxxxxx</label></div>" + 
        "<div><label>xxxxxxxxxxxx</label></div>" + 
        "<div><label>xxxxxxx</label></div>" + 
        "<br/><br/>" + 
        "<div style='Font-size: 32px;'>" + 
        "<label>" + strSpaces + Firstname + " " + Lastname + "</label></div>" + 
        "<div style='Font-size: 32px;'>" + 
        "<label >" + strSpaces + Address + "</label></div>" + 
        "<div style='Font-size: 32px;'>" + 
        "<label>" + strSpaces + PostalCode + City + "</label></div>" + 
        "<div style='Font-size: 32px;'>" + 
        "<label>" + strSpaces + Country + "</label></div>" + 
        "</body>" + 
        "</html>"; 
    string strTo = "[email protected]"; 
    string strSubject = "Expedition."; 
    SendingMail(html, strTo, strSubject); 

} 

protected void SendingMail(string strHTML, string strTo, string strSubject) 
{ 
    MailAddress from = new MailAddress("[email protected]"); 
    MailAddress to = new MailAddress(strTo); 
    System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(from, to); 
    mail.Subject = strSubject; 

    mail.IsBodyHtml = true; 

    string url = HttpContext.Current.Request.Url.AbsoluteUri; 
    mail.Body = strHTML; 
    SmtpClient smtp = new SmtpClient(); 
    smtp.Host = "smtp.xxxx.xxx"; 
    smtp.Port = 587; 

    smtp.Credentials = new NetworkCredential("[email protected]", "xxx5Qq"); 
    smtp.EnableSsl = true; 

    smtp.Send(mail); 

} 

테이블 :

tables

메일 :

mail

관련 문제