2015-02-19 2 views
0

Я создал два GridViews: Members and Sponsors соответственно и предоставил total count этих двух групп людей. Моя проблема в том, что у меня есть две кнопки, которые открываются в Excel: MemSpreadshtBTN (Member) и SPSpreadshtBTN (Спонсор), и я не мог понять, как получить счет только для членов, а другой только для спонсоров в формате Excel. Пожалуйста помоги.Отдельный подсчет для двух групп

ASPX

<asp:Label ID="totalCountLBL" runat="server" Text="Total Count:" Visible="false"></asp:Label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:Button 
     ID="MemSpreadshtBTN" runat="server" OnClick="MemSpreadshtBTN_OnClick" Text="Member Spreadsheet" Visible="false" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<asp:Button 
     ID="SPSpreadshtBTN" runat="server" OnClick="SPSpreadshtBTN_OnClick" Text="Sponsor Spreadsheet" Visible="false" /><br /> 
<asp:GridView ID="GridView1"...> 
... 
<asp:GridView ID="GridView2"...> 
... 

C#

protected void TotalCount() 
{ 
    conn.Open(); 
    try 
    { 
     string strTotalCt = "SELECT count(ConferenceRegistrationID) FROM ConferenceRegistration cr, Conference con WHERE con.ConferenceID=cr.ConferenceIDNum AND [email protected] AND cr.Deleted='N'"; 
     SqlCommand ChkTotal = new SqlCommand(strTotalCt, conn); 
     ChkTotal.Parameters.AddWithValue("@confID", conferenceDDL.SelectedValue); 

     int temp = Convert.ToInt32(ChkTotal.ExecuteScalar().ToString()); 
     if (temp > 0) 
     { 
      totalCountLBL.Text = "<strong>Total Count:" + temp + "</strong>"; 
      totalCountLBL.Visible = true; 
      MemSpreadshtBTN.Visible = true; 
      SPSpreadshtBTN.Visible = true; 
      returnLBL.Text = "<div style='margin-top: 10px;'><a href='~/Admin/Participants.aspx' onclick='window.history.go(-1); return false;'>Return to previous page</a>.</div>"; 
      returnLBL.Visible = true; 
     } 
     else 
     { 
      ChkOther(); 
     } 
    } 
    finally 
    { 
     conn.Close(); 
    } 
} 


protected void MemSpreadshtBTN_OnClick(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment;filename=ParticipantsSpreadsheet.xls"); 
    Response.ContentType = "application/vnd.xls"; 

    System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 

    System.Web.UI.HtmlTextWriter htmlWrite = 
    new HtmlTextWriter(stringWrite); 

    htmlWrite.Write(totalCountLBL.Text.ToString() + "<br />"); 
    GridView1.RenderControl(htmlWrite); 

    Response.Write(stringWrite.ToString()); 

    Response.End(); 
} 

protected void SPSpreadshtBTN_OnClick(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment;filename=ParticipantsSpreadsheet.xls"); 
    Response.ContentType = "application/vnd.xls"; 

    System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 

    System.Web.UI.HtmlTextWriter htmlWrite = 
    new HtmlTextWriter(stringWrite); 

    htmlWrite.Write(totalCountLBL.Text.ToString() + "<br />"); 
    GridView2.RenderControl(htmlWrite); 

    Response.Write(stringWrite.ToString()); 

    Response.End(); 
} 
+0

, какая часть кода не работает you.Btnclicks или выполнить скаляр, чтобы получить отсчет от select statement – user2526236

+0

@ user2526236: Все работает, за исключением небольшой порции. Предположим, на моей странице общее количество 10 человек. 6 из них являются Членами и 4 являются Спонсорами. Как я могу подсчитать количество 6 человек в электронной таблице участников, и число из 4 отображается в электронной таблице Спонсора? –

+0

В таблице ConferenceRegistration в вашей БД есть столбец, который отличает спонсора или участников. Есть ли столбец, по которому вы можете отличить, является ли он спонсором или членом? – user2526236

ответ

0

Решенный мою проблему путем добавления 2 метки на ASPX:

<asp:Label ID="MembertotalCountLBL" runat="server" Text="Total Count:" Visible="false"></asp:Label> 
<asp:Label ID="SponsortotalCountLBL" runat="server" Text="Total Count:" Visible="false"></asp:Label> 

Затем добавляют 2 методы, аналогичные TOTALCOUNT() в C# ;, кроме метода # 1 звонки для SponsorsIDNum is null для членов и метод # 2 звонка для SponsorsIDNum is not null для Спонсоров в Выберите заявлений. Afterwhich, я изменил следующее, и она работает:

MemSpreadshtBTN

htmlWrite.Write(MembertotalCountLBL.Text.ToString() + "<br />"); 

SPSpreadshtBTN

htmlWrite.Write(SponsortotalCountLBL.Text.ToString() + "<br />"); 
0

Для этой работы вам необходимо установить пакет Excel с помощью NuGet. найдите «excelpackage» и установите его.

public DataTable gettable(int SponsorIDNum) 
     { 
     SqlConnection thisConnection = new SqlConnection("server=.;database=local;Integrated Security=SSPI") 
     string query = "select * from tbluser where companyID =" +companyID; 
     SqlDataAdapter ad = new SqlDataAdapter(query, thisConnection); 
     DataSet ds = new DataSet(); 
     ad.Fill(ds, "Categories"); 
     DataTable dt = ds.Tables[0]; 
     return dt; 
     } 
    protected void Member_Click(object sender, EventArgs e) 
     { 
     try 
      { 
      var pck = new OfficeOpenXml.ExcelPackage(); 
      var ws = pck.Workbook.Worksheets.Add("Name of the Worksheet"); 
      // get your DataTable 
      var tbl = gettable(0); 
      ws.Cells["A1"].LoadFromDataTable(tbl, true, OfficeOpenXml.Table.TableStyles.Medium6); 

      var dataRange = ws.Cells[ws.Dimension.Address.ToString()]; 
      dataRange.AutoFitColumns(); 

      Response.Clear(); 
      Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      Response.AddHeader("content-disposition", "attachment; filename=NameOfExcelFile.xlsx"); 
      Response.BinaryWrite(pck.GetAsByteArray()); 
      } 
     catch (Exception ex) 
      { 
      // log exception 
      throw; 
      } 
     Response.End(); 

     } 

    protected void Sponsor_Click(object sender, EventArgs e) 
     { 
     try 
      { 
      var pck = new OfficeOpenXml.ExcelPackage(); 
      var ws = pck.Workbook.Worksheets.Add("Name of the Worksheet1"); 
      // get your DataTable 
      var tbl = gettable(1); 
      ws.Cells["A1"].LoadFromDataTable(tbl, true, OfficeOpenXml.Table.TableStyles.Medium6); 

      var dataRange = ws.Cells[ws.Dimension.Address.ToString()]; 
      dataRange.AutoFitColumns(); 

      Response.Clear(); 
      Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      Response.AddHeader("content-disposition", "attachment; filename=NameOfExcelFile.xlsx"); 
      Response.BinaryWrite(pck.GetAsByteArray()); 
      } 
     catch (Exception ex) 
      { 
      // log exception 
      throw; 
      } 
     Response.End(); 
     } 

В кнопке «Участники» перейдите к значению столбца. Это должно решить проблему. Источник: Inserting data into an excel sheet from a DataTable

+0

Можете ли вы продемонстрировать, как я использую это в своем коде? Спасибо. –

+0

@ EstherB если это работает, отметьте его как ответ. – user2526236

+0

Вчера я смог найти решение. Это был ваш вопрос о колонке, которая отличалась между спонсорами и членами, что вызвало мой мыслительный процесс. Спасибо за помощь! –

Смежные вопросы