我想为多个员工生成Excel报告

我想为多个员工生成Excel报告

问题描述:

我想为月份生成员工报告。但我不能这样做。我只是试图做到这一点。但它只返回最后一条员工记录。我想为多个员工生成Excel报告

我正在使用列表框并选择多个员工来生成报告。但我做不到。

我的部分鳕鱼是这里..

DataSet4TableAdapters.sp_getalltimesheetTableAdapter TA1 = new DataSet4TableAdapters.sp_getalltimesheetTableAdapter(); 
DataSet4.sp_getalltimesheetDataTable DS1 = TA1.GetData(); 
foreach (DataRow dr in DS1.Rows) 
{ 
    string name = Convert.ToString(dr["Employee_ID"]) + "-" + Convert.ToString(dr["Employee_Name"]); 
    for (int i = 0; i < lbxempname.Items.Count; i++) 
    { 
     if (lbxempname.Items[i].Selected) 
     { 
      string id = lbxempname.Items[i].Text; 
      if (name == id) 
      { 
       string expression = "Employee_Id='" + name.Substring(0,8) + "'and punchDate >=#" + txtstartdate.Text + "# and PunchDate <=#" + txtenddate.Text + "# "; 
       DataSet4TableAdapters.sp_getalltimesheetTableAdapter TA = new DataSet4TableAdapters.sp_getalltimesheetTableAdapter(); 
       DataSet4.sp_getalltimesheetDataTable DS = TA.GetData(); 
       if (DS.Rows.Count == 0) 
       { 
        ScriptManager.RegisterStartupScript(this, this.GetType(), "temp", "<script language='javascript'>alert('No records found');</script>", false); 
       } 
       else 
       { 
        DataView dataview = DS1.DefaultView; 
        dataview.RowFilter = expression; 
        Session["TaskTable"] = dataview; 
        grdvw = new GridView(); 
        grdvw.DataSource = Session["TaskTable"]; 
        grdvw.DataBind(); 
        dt = new DataTable(); 
        dt.Columns.Add("EmployeeId"); 
        dt.Columns.Add("EmployeeName"); 
        dt.Columns.Add("Department"); 
        dt.Columns.Add("Date"); 
        dt.Columns.Add("Day"); 
        dt.Columns.Add("Intime"); 
        dt.Columns.Add("Outtime"); 
        dt.Columns.Add("Late_After"); 
        dt.Columns.Add("Early_Before"); 
        dt.Columns.Add("Remarks"); 
        foreach (GridViewRow oItem in grdvw.Rows) 
        { 
         DataRow dr1 = dt.NewRow(); 
         string empid = oItem.Cells[0].Text; 
         string empname = oItem.Cells[1].Text; 
         string dept = oItem.Cells[2].Text; 
         string PunchDate = oItem.Cells[3].Text; 
         string Day = oItem.Cells[4].Text; 
         string intime = oItem.Cells[5].Text; 
         string outtime = oItem.Cells[6].Text; 

         groupdetails(empid, empname, PunchDate, dept, intime, outtime); 
         if (intime == "" || outtime == "") 
         { 
          remark = "A"; 
         } 
         else 
         { 
          remark = "P"; 
         } 
         dr1["EmployeeId"] = Convert.ToString(empid); 
         dr1["EmployeeName"] = Convert.ToString(empname); 
         dr1["Department"] = Convert.ToString(dept); 
         dr1["Date"] = Convert.ToString(PunchDate); 
         dr1["Day"] = Convert.ToString(Day); 
         dr1["Intime"] = Convert.ToString(intime); 
         dr1["Outtime"] = Convert.ToString(outtime); 
         dr1["Late_After"] = Convert.ToString(Session["late"].ToString()); 
         dr1["Early_Before"] = Convert.ToString(Session["early"].ToString()); 
         dr1["Remarks"] = Convert.ToString(remark); 
         dt.Rows.Add(dr1); 
         ViewState["new"] = dt; 

        } 
       } 
      } 

     } 

    } 
} 
grdvw.DataSource = ViewState["new"]; 
grdvw.DataBind(); 
System.IO.StringWriter stringwriter = new StringWriter(); 
HtmlTextWriter htmlwriter = new HtmlTextWriter(stringwriter); 
grdvw.RenderControl(htmlwriter); 
Response.Write(stringwriter.ToString()); 
Response.End(); 

它返回最后选择的员工的输出。但是我想从列表框中 所有选中的员工记录,请帮我...我 输出是这样的......

EmployeeId EmployeeName Department Date   Day  Intime  Outtime  Late_After Early_Before Remarks 
    00626243   HariharanJ SBS IT  01-04-2012 Wednesday 06:40:00 15:00:00 00:00  00:00   P 
    00626243   HariharanJ SBS IT  01-03-2012 Tuesday  00:00:00 14:40:00 00:00  00:05   P 
    00626243   HariharanJ SBS IT  01-05-2012 Thursday 07:00:00 14:35:00 00:20  00:10   P 

上述报告是列表框最后选定的员工。我想这种与上面头小破全体员工报告..

+0

它看起来像你正在筛选出一切,但“表达式”这将是数据视图上的最后一个员工名称。 – Bit 2012-02-06 12:34:53

+0

您是否尝试过调试并检查它是否循环播放? – Ravia 2012-02-06 12:38:43

+0

我是调试,但它从第一个列表中读取数据到最后一个,但最后只有最后一个记录的数据集。这就是为什么我问如何将每个循环值存储到单个数据集。 – Fernando 2012-02-07 04:51:49

我已经做了请查看此链接 整个代码和情景描述嗨同样的事情,我认为这将有助于你

Export Gridview in Excel

+0

谢谢..我会检查这个.. – Fernando 2012-02-06 12:21:41

+0

但我想生成一个循环记录在一个Excel文件中的报告.. – Fernando 2012-02-06 12:25:38

+0

你可以使用相同的方式生成绑定你的网格与生成的数据集,然后做我已经完成的练习 – 2012-02-06 12:27:49

我建议看看NPOI,一个Apache POI的移植;这个库允许你从API生成MS Office文件,而没有任何其他的依赖,比如前端对象,MS Office安装等)。