1

私はRadGridwith Showを使用しFooter = trueています。ブラウザでこのページを開くと、正常に動作しています。しかし、このグリッドを電子メールで送信して Outlook で開くと、グリッドの合計がアイテムの上に表示されます。Outlook での問題に関連する以下のスクリーン ショットを参照してください。

Outlook のスナップショット

ブラウザ(Firefox)では問題なく表示されます。しかし、レンダリングされた HTML を確認すると、フッター HTML はヘッダーとボディの間にあります。

私のサンプルコード:

<telerik:RadGrid ID="radGrid1" runat="server" OnItemDataBound="RadGrid1_ItemDataBound"
DataSourceID="ObjectDataSource1" OnDeleteCommand="radGrid1_OnDeleteCommand" OnItemCommand="RadGridTask_ItemCommand"
ShowFooter="true" AllowSorting="false">
<MasterTableView OverrideDataSourceControlSorting="true" CommandItemDisplay="None"
    NoDetailRecordsText="" NoMasterRecordsText="" EnableNoRecordsTemplate="false"
    ShowHeadersWhenNoRecords="false" EditMode="PopUp" DataKeyNames="LabourID" DataSourceID="ObjectDataSource1">
    <CommandItemSettings ExportToPdfText="Export to PDF" />
    <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column" Visible="True">
    </RowIndicatorColumn>
    <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column" Visible="True">
    </ExpandCollapseColumn>
    <Columns>



        <telerik:GridBoundColumn DataField="TotalMins" HeaderText="Duration" SortExpression="TotalMins"
            UniqueName="TotalMins" HeaderStyle-Width="90px" FilterControlAltText="Filter TotalMins column"
            Aggregate="Sum" FooterText=" ">
            <HeaderStyle BorderColor="#872B07" CssClass="tb_head" />
            <ItemStyle Wrap="false" Width="90px" CssClass="tb_cell" />
            <FooterStyle Font-Bold="True" Font-Size="12px"></FooterStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="TotalCharge" HeaderText="Total" SortExpression="TotalCharge"
            UniqueName="TotalCharge" DataFormatString="{0:c}" HeaderStyle-Width="80px" FilterControlAltText="Filter TotalCharge column"
            Aggregate="Sum" FooterText="Total: ">
            <HeaderStyle BorderColor="#872B07" CssClass="tb_head" />
            <FooterStyle Font-Bold="True" Font-Size="12px"></FooterStyle>
            <ItemStyle Wrap="false" Width="90px" CssClass="tb_cell" />
            <HeaderStyle Width="80px" />
        </telerik:GridBoundColumn>
    </Columns>
</MasterTableView>
<ClientSettings>
</ClientSettings>
<FilterMenu EnableImageSprites="False">
</FilterMenu>

4

2 に答える 2

2

この気の利いた小さなオプションを試してみてください:

以下のコード スニペットは、Gmail の SMTP サーバーを使用して電子メールを送信する方法を示しています。

public void SendMail(string smtpAddress, string from, string to, string body, string subject, bool isHtml, Stream attachmentStream, string fileName)
{
    SmtpClient smtpClient = new SmtpClient(smtpAddress);
    MailMessage email = new MailMessage();
    email.From = new MailAddress(from);
    email.To.Add(to);    
    email.Body = body;
    email.Subject = subject;
    email.IsBodyHtml = isHtml;
    smtpClient.EnableSsl = true;
    email.Attachments.Add(new Attachment(attachmentStream, fileName));

    NetworkCredential myCreds = new NetworkCredential("youremail@gmail.com", "yourpassword", "");
    smtpClient.Credentials = myCreds;

    smtpClient.Send(email);
}

エクスポートは「キャンセル」されますが、エクスポートされた「ファイル」を含むメモリストリームが電子メールの添付ファイルとして追加されることに注意してください。ここから撮影

protected void RadGrid1_GridExporting(object source, GridExportingArgs e)
{
    if (e.ExportType == ExportType.Excel)
    {
        MemoryStream ms = new MemoryStream(new ASCIIEncoding().GetBytes(e.ExportOutput));
        SendMail("smtp.gmail.com", "sourcemail@gmail.com", "targetmail@gmail.com", "mail body", "mail subject", false, ms, "ExportedFile.xls");
    }
    Response.Redirect(Request.Url.AbsoluteUri);
}

または、html を取得してメールで送信するだけの場合は、これを試してください:ここから取得

<telerik:RadGrid ID="RadGrid1" Skin="Black" runat="server" GridLines="None" OnNeedDataSource="RadGrid1_NeedDataSource1">
    <MasterTableView>
        <Columns>
            <telerik:GridBoundColumn DataField="Subject" HeaderText="Subject">
            </telerik:GridBoundColumn>
        </Columns>
        <RowIndicatorColumn>
            <HeaderStyle Width="20px"></HeaderStyle>
        </RowIndicatorColumn>
        <ExpandCollapseColumn>
            <HeaderStyle Width="20px"></HeaderStyle>
        </ExpandCollapseColumn>
    </MasterTableView>
</telerik:RadGrid>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Send email - grid" />


protected void RadGrid1_NeedDataSource1(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    List<MailMessage> mList = new List<MailMessage>();
    MailMessage m1 = new MailMessage();
    m1.Subject = "One";
    mList.Add(m1);
    MailMessage m2 = new MailMessage();
    m2.Subject = "Two";
    mList.Add(m2);
    MailMessage m3 = new MailMessage();
    m3.Subject = "Three";
    mList.Add(m3);
    RadGrid1.DataSource = mList;
}

protected void Button1_Click(object sender, EventArgs e)
{
    string GridRawHtml;
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter clearWriter = new HtmlTextWriter(stringWriter);
    RadGrid1.RegisterWithScriptManager = false;
    RadGrid1.RenderControl(clearWriter);
    GridRawHtml = clearWriter.InnerWriter.ToString();
    GridRawHtml = GridRawHtml.Remove(GridRawHtml.IndexOf("<script"), GridRawHtml.LastIndexOf("</script>") - GridRawHtml.IndexOf("<script"));
    Response.Write(GridRawHtml);
}
于 2013-10-07T14:09:41.027 に答える
1

これは、Telerik のコントロールが組み込みリソースと組み合わせた大量の JavaScript (= 大量の CSS) を使用しているためである可能性が最も高いです。@sine があなたの質問のコメントで述べたように、これらのコントロールは明らかに電子メールの配信性/移植性のために設計されていません。グリッドのフッター位置を管理する JS がおそらくありますが、そのような JS は Outlook メールには含まれません (それについては、Telerik のフォーラムで質問してください)。

この種の HTML には通常、配信可能性やスパム チェックの問題も伴うため、より「電子メール」に適した形式でグリッドを生成する別の方法を検討する必要があります。

于 2013-10-07T12:17:14.627 に答える