Domanda

I'm using color code based on some percentage logic in the GridView. But while exporting to Excel I dont know how to maintain this color code in the Excel. Please guide

Below is the code for RowDataBound

protected void Grd_QADetails_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            var dataRowView = e.Row.DataItem as DataRowView;
            DataRow row = dataRowView.Row;

            var Current = (row["Current Month Percentage"] as double?) ?? null;

            double? Yellow = (double?)Convert.ToDouble(row["Yellow"]);
            double? Green = (double?)Convert.ToDouble(row["Green"]);

            if (Current != null)
            {
                if (Current >= Green)
                    e.Row.Cells[6].BackColor = Color.Green;

                if (Current >= Yellow && Current < Green)
                    e.Row.Cells[6].BackColor = Color.Yellow;

                if (Current < Yellow)
                    e.Row.Cells[6].BackColor = Color.Red;
            }               
        }
    }

Below is the code for Export to Excel

private void ExportthroughWeb(DataTable dt, string FileName)
    {
        try
        {
            if (dt.Rows.Count > 0)
            {
                string filename = FileName + ".xls";

                using (System.IO.StringWriter tw = new System.IO.StringWriter())
                {
                    System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
                    DataGrid dgGrid = new DataGrid();
                    dgGrid.DataSource = dt;
                    dgGrid.DataBind();

                    //Get the HTML for the control.
                    dgGrid.RenderControl(hw);
                    //Write the HTML back to the browser.

                    Response.ContentType = "application/vnd.ms-excel";
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
                    this.EnableViewState = false;

                    Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">" + Environment.NewLine);
                    Response.Write(tw.ToString());

                    Response.Write("</body>");
                    Response.Write("</html>");

                    Response.End();
                }
            }
        }
È stato utile?

Soluzione

You need to attach an event handler for RowDataBound

Please modify your code as follows:

private void ExportthroughWeb(DataTable dt, string FileName)
    {
        try
        {
            if (dt.Rows.Count > 0)
            {
                string filename = FileName + ".xls";

                using (System.IO.StringWriter tw = new System.IO.StringWriter())
                {
                    System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
                    GridView dgGrid = new GridView();
                    dgGrid.DataSource = dt;
                    dgGrid.RowDataBound += new GridViewRowEventHandler(Grd_QADetails_RowDataBound);
                    dgGrid.DataBind();

                    //Get the HTML for the control.
                    dgGrid.RenderControl(hw);
                    //Write the HTML back to the browser.

                    Response.ContentType = "application/vnd.ms-excel";
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
                    this.EnableViewState = false;

                    Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">" + Environment.NewLine);
                    Response.Write(tw.ToString());

                    Response.Write("</body>");
                    Response.Write("</html>");

                    Response.End();
                }
            }

Hope this helps..

My Tested Example: Update

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="webapp1._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:GridView runat="server" ID="grdDetails" OnRowDataBound="Grd_QADetails_RowDataBound">

    </asp:GridView>
    <asp:Button  runat="server" ID="btnSubmit" OnClick="ExportToGrid"/>
</asp:Content>

Code behind:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Drawing;

namespace webapp1
{
    public partial class _Default : System.Web.UI.Page
    {

        DataTable dtDetails = new DataTable();


        protected void Grd_QADetails_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                var dataRowView = e.Row.DataItem as DataRowView;
                DataRow row = dataRowView.Row;

                var Current = (row["Dosage"] as int?) ?? null;


                if (Current != null)
                {
                    if (Current >= 1 && Current < 10)
                        e.Row.Cells[1].BackColor = Color.Green;

                    else if (Current >= 10 && Current < 20)
                        e.Row.Cells[1].BackColor = Color.Yellow;

                    else
                        e.Row.Cells[1].BackColor = Color.Red;
                }
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {


            dtDetails.Columns.Add("Dosage", typeof(int));
            dtDetails.Columns.Add("Drug Suggested", typeof(string));
            dtDetails.Columns.Add("Patient Name", typeof(string));
            dtDetails.Columns.Add("Date", typeof(DateTime));
            dtDetails.Columns.Add("Type", typeof(string));
            dtDetails.Columns.Add("Payment Mode", typeof(string));
            dtDetails.Columns.Add("Appointment Status", typeof(string));
            dtDetails.Columns.Add("Location", typeof(string));

            dtDetails.Rows.Add(1, "Indocin", "David", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(2, "Enebrel", "Sam", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(3, "Hydralazine", "Christoff", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(4, "Combivent", "Janet", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(5, "Dilantin", "Melanie", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");

            dtDetails.Rows.Add(6, "Indocin", "David", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(7, "Enebrel", "Sam", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(8, "Hydralazine", "Christoff", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(9, "Combivent", "Janet", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(10, "Dilantin", "Melanie", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");

            dtDetails.Rows.Add(11, "Indocin", "David", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(12, "Enebrel", "Sam", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(13, "Hydralazine", "Christoff", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(14, "Combivent", "Janet", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(15, "Dilantin", "Melanie", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");

            dtDetails.Rows.Add(16, "Indocin", "David", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(17, "Enebrel", "Sam", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(18, "Hydralazine", "Christoff", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(19, "Combivent", "Janet", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(20, "Dilantin", "Melanie", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");

            dtDetails.Rows.Add(21, "Indocin", "David", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(22, "Enebrel", "Sam", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(23, "Hydralazine", "Christoff", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(24, "Combivent", "Janet", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");
            dtDetails.Rows.Add(25, "Dilantin", "Melanie", DateTime.Now, "Casuality", "Cash", "Pending", "Kolkatta");

            if (!IsPostBack)
            {
                grdDetails.DataSource = dtDetails;
                grdDetails.DataBind();
            }

        }

        protected void ExportToGrid(object sender, EventArgs e)
        {

            ExportToGrid(dtDetails);
        }

        private void ExportToGrid(DataTable dt)
        {

            if (dt.Rows.Count > 0)
            {
                string filename = "Avinash" + ".xls";

                using (System.IO.StringWriter tw = new System.IO.StringWriter())
                {
                    System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
                    GridView dgGrid = new GridView();
                    dgGrid.DataSource = dt;
                    dgGrid.RowDataBound += new GridViewRowEventHandler(Grd_QADetails_RowDataBound);
                    dgGrid.DataBind();

                    //Get the HTML for the control.
                    dgGrid.RenderControl(hw);
                    //Write the HTML back to the browser.

                    Response.ContentType = "application/vnd.ms-excel";
                    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
                    this.EnableViewState = false;

                    Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">" + Environment.NewLine);
                    Response.Write(tw.ToString());

                    Response.Write("</body>");
                    Response.Write("</html>");

                    Response.End();
                }
            }
        }

    }![enter image description here][1]
}

enter image description here

Altri suggerimenti

Here's the link you will find helpful. Just Change your condition of color accordingly. http://gridview-excel.blogspot.in/2011/12/gridview-to-excel-in-aspnetc.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top