2012-02-06 72 views
1

我想爲月份生成員工報告。但我不能這樣做。我只是試圖做到這一點。但它只返回最後一條員工記錄。我想爲多個員工生成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

回答

1

我已經做了請查看此鏈接 整個代碼和情景描述嗨同樣的事情,我認爲這將有助於你

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

0

我建議看看NPOI,一個Apache POI的移植;這個庫允許你從API生成MS Office文件,而沒有任何其他的依賴,比如前端對象,MS Office安裝等)。