开发者

Dataset output to Excel Problem

I am using the following code to output data from a number of tables in my database to an excel document:

Protected void btnExcelExport_Click(object sender, EventArgs e)
{

string strQuery = "SELECT s.Story, s.StoryCategoryID, CONVERT(VARCHAR(10), 
s.CreationDate, 103) AS CreationDate, m.CompanyRole, af.Name FROM Story s INNER JOIN    
ProjectIterationMember pm ON pm.ProjectIterationMemberID = s.ProjectIterationMemberID 
INNER JOIN Iterations i ON i.ProjectIterationID = pm.ProjectIterationID INNER JOIN 
Member m ON m.MemberID = pm.MemberID INNER JOIN ProjectStoryFactors psf ON psf.StoryID = 
s.StoryID INNER JOIN AgileFactors af ON af.AgileFactorID = psf.AgileFactorID WHERE 
i.ProjectID = '" + proj_id + "'";

SqlCommand cmd = new SqlCommand(strQuery);
DataTable dt = GetData(cmd);

GridView GridView1 = new GridView();
GridView1.AllowPaging = false;
GridView1.DataSource = dt;
GridView1.DataBind();

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition","attachment;filename=RetroCloud" +  
DateTime.Now.Ticks + ".xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new Strin开发者_StackOverflow中文版gWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);

for (int i = 0; i < GridView1.Rows.Count; i++)
{

   GridView1.Rows[i].Attributes.Add("class", "textmode");
}
GridView1.RenderControl(hw);

string style = @"<style> .textmode { mso-number-format:\@; } </style>";
Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();

The output is as follows:

Story | StoryCategoryID | CreationDate | CompanyRole | Name

negative iii | 1 | 21/02/2011 | Business Analyst | Project Duration
negative iii | 1 | 21/02/2011 | Business Analyst | Team Size
negative iii | 1 | 21/02/2011 | Business Analyst | Process
negative ccc | 1 | 22/02/2011 | Admin | Workspace Layout
negative ccc | 1 | 22/02/2011 | Admin | Organisational and Reporting Structure
negative ccc | 1 | 22/02/2011 | Admin | Process

What I would like to do 2 things. Sample code would be appreciated - this is wreching my head! Many thanks for your help!

1) For StoryCategoryID, if 1 is retrieved - display 'Negative' and if 0 is retrieved - display 'Positive' instead.

2) Have the output in the following format:

Story | Story Type | Creation Date | Company Role | Tag 1 | Tag 2 | Tag 3

negative iii | 1 | 21/02/2011 | Business Analyst | Project Duration | Team Size | Process
negative ccc | 1 | 22/02/2011 | Admin | Workspace Layout | Organisational | Process


well, maybe not the best solution, but this might do what you want:

SELECT
  Story
, CASE StoryCategoryID WHEN 1 THEN 'Negative' WHEN 0 THEN 'Positive' ELSE CAST(StoryCategoryID as varchar(10)) as StoryCategoryID
, CreationDate
, CompanyRole
, MAX(CASE WHEN Z.MinName = af2.Name THEN af2.Name ELSE '' END) as Tag1
, MAX(CASE WHEN Z.MinName <> af2.Name AND Z.MaxName <> af2.Name THEN af2.Name ELSE '' END) as Tag2
, MAX(CASE WHEN Z.MaxName = af2.Name THEN af2.Name ELSE '' END) as Tag3
FROM (
SELECT
  s.Story
, s.StoryCategoryID
, CONVERT(VARCHAR(10), s.CreationDate, 103) AS CreationDate
, m.CompanyRole
, af.AgileFactorID
, MIN(af.Name) MinName
, MAX(af.Name) MaxName
FROM Story s
INNER JOIN ProjectIterationMember pm
ON pm.ProjectIterationMemberID = s.ProjectIterationMemberID 
INNER JOIN Iterations i
    ON i.ProjectIterationID = pm.ProjectIterationID
INNER JOIN Member m
    ON m.MemberID = pm.MemberID
INNER JOIN ProjectStoryFactors psf
    ON psf.StoryID = s.StoryID
INNER JOIN AgileFactors af
    ON af.AgileFactorID = psf.AgileFactorID
WHERE i.ProjectID = '" + proj_id + "'";
GROUP BY s.Story, s.StoryCategoryID, CONVERT(VARCHAR(10), s.CreationDate, 103), m.CompanyRole, af.AgileFactorID
) Z
INNER JOIN AgileFactors af2
    ON af2.AgileFactorID = Z.AgileFactorID
GROUP BY Story, StoryCategoryID, CreateDate, CompanyRole
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜