2015-03-02 251 views
0

基本上,我有一個SQLDataSource是一個具有兩個參數(日期時間)的存儲過程。我有兩個日曆可以在點擊時設置這些參數。我檢查了存儲過程和參數的工作,但是GridView沒有顯示存儲過程的結果,因爲用戶必須單擊日曆來設置結果的參數。我認爲GridView只是顯示沒有任何參數的存儲過程結果(所以它是空白的)。這是我的懷疑,因爲我也有一個「導出到Excel」按鈕,將GridView導出到Excel,並且Excel文件在下載後也是空白的。按鈕刷新GridView?

我想我需要實現一個刷新GridView的按鈕,以便用戶可以爲存儲過程創建結果的兩個日曆選擇日期參數。然後該按鈕將刷新/更新GridView,只顯示帶有新存儲過程結果的初始空白結果。我如何創建這個「刷新按鈕」?

僅供參考, aspx.cs看起來是這樣的:

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

namespace WebApplication3 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     DateTime fromDate = new DateTime(); 
     DateTime toDate = new DateTime(); 


     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void Button2_Click(object sender, EventArgs e) 
     { 
      GridView1.AllowPaging = false; 
      GridView1.AllowSorting = false; 
      GridView1.DataBind(); 

      Response.ClearContent(); 
      Response.AddHeader("content-disposition", "attachment; filename=gvtoexcel.xls"); 
      Response.ContentType = "application/excel"; 
      System.IO.StringWriter sw = new System.IO.StringWriter(); 
      HtmlTextWriter htw = new HtmlTextWriter(sw); 
      GridView1.RenderControl(htw); 
      Response.Write(sw.ToString()); 
      Response.End(); 

      GridView1.AllowPaging = true; 
      GridView1.AllowSorting = true; 
      GridView1.DataBind(); 
     } 
     public override void VerifyRenderingInServerForm(Control control) 
     { 
     } 

     protected void Calendar1_SelectionChanged(object sender, EventArgs e) 
     { 
      fromDate = Calendar1.SelectedDate; 
      SqlDataSource1.SelectParameters[0].DefaultValue = fromDate.ToString(); 


     } 

     protected void Calendar2_SelectionChanged(object sender, EventArgs e) 
     { 
      toDate = Calendar2.SelectedDate; 
      SqlDataSource1.SelectParameters[1].DefaultValue = toDate.ToString(); 
     } 
    } 
} 

而且在.aspx看起來是這樣的:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication3.WebForm1" EnableEventValidation="false" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     .style1 
     { 
      text-align: center; 
     } 
     .style2 
     { 
      text-align: left; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div class="style1" style="margin-left: 40px"> 

     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:BIZ_DBConnectionString %>" 
      SelectCommand="Payrolldeduction" SelectCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:Parameter DbType="DateTime" Name="fromDate" /> 
       <asp:Parameter DbType="DateTime" Name="toDate" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
     <div class="style1"> 

     Payroll Report<br /> 
     </div> 
     <div class="style2"> 
      <br /> 
      From:</div> 
     <asp:Calendar ID="Calendar1" runat="server" 
      onselectionchanged="Calendar1_SelectionChanged" style="text-align: left"> 
     </asp:Calendar> 
     <div class="style2"> 
      To:</div> 
     <asp:Calendar ID="Calendar2" runat="server" style="text-align: left"> 
     </asp:Calendar> 
     <br /> 
     <br /> 
     <br /> 
     <asp:Button ID="Button2" runat="server" onclick="Button2_Click" 
      Text="Export to Excel" /> 
     <br /> 
     <br /> 
     <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" 
      onselectedindexchanged="Page_Load" AllowPaging="True"> 
      <Columns> 
       <asp:BoundField DataField="INST_ID" HeaderText="INST_ID" 
        SortExpression="INST_ID" /> 
       <asp:BoundField DataField="EMPLOYEE_ID" HeaderText="EMPLOYEE_ID" 
        SortExpression="EMPLOYEE_ID" /> 
       <asp:BoundField DataField="HR_DEDUCTION_AND_BENEFITS_CODE" 
        HeaderText="HR_DEDUCTION_AND_BENEFITS_CODE" 
        SortExpression="HR_DEDUCTION_AND_BENEFITS_CODE" /> 
       <asp:BoundField DataField="Column1" HeaderText="Column1" ReadOnly="True" 
        SortExpression="Column1" /> 
       <asp:BoundField DataField="WITHHOLDING_LIABILITY_ACCOUNT_MASK" 
        HeaderText="WITHHOLDING_LIABILITY_ACCOUNT_MASK" 
        SortExpression="WITHHOLDING_LIABILITY_ACCOUNT_MASK" /> 
       <asp:BoundField DataField="HR_DEDUCTION_AND_BENEFITS_ID" 
        HeaderText="HR_DEDUCTION_AND_BENEFITS_ID" 
        SortExpression="HR_DEDUCTION_AND_BENEFITS_ID" /> 
       <asp:BoundField DataField="CHECK_DATE" HeaderText="CHECK_DATE" 
        SortExpression="CHECK_DATE" /> 
       <asp:BoundField DataField="CHECK_NO" HeaderText="CHECK_NO" 
        SortExpression="CHECK_NO" /> 
       <asp:BoundField DataField="FIN_INST_ACCT_ID" HeaderText="FIN_INST_ACCT_ID" 
        SortExpression="FIN_INST_ACCT_ID" /> 
       <asp:BoundField DataField="Column2" HeaderText="Column2" ReadOnly="True" 
        SortExpression="Column2" /> 
       <asp:BoundField DataField="HR_DEDUCTION_AND_BENEFIT_CYCLE_CODE" 
        HeaderText="HR_DEDUCTION_AND_BENEFIT_CYCLE_CODE" 
        SortExpression="HR_DEDUCTION_AND_BENEFIT_CYCLE_CODE" /> 
       <asp:BoundField DataField="LENGTH" HeaderText="LENGTH" 
        SortExpression="LENGTH" /> 
       <asp:BoundField DataField="EMPLOYEE_COMPUTED_AMOUNT" 
        HeaderText="EMPLOYEE_COMPUTED_AMOUNT" 
        SortExpression="EMPLOYEE_COMPUTED_AMOUNT" /> 
       <asp:BoundField DataField="EMPLOYEE_BANK_ROUTING_NUMBER" 
        HeaderText="EMPLOYEE_BANK_ROUTING_NUMBER" 
        SortExpression="EMPLOYEE_BANK_ROUTING_NUMBER" /> 
       <asp:BoundField DataField="EMPLOYEE_ACCOUNT_TYPE" 
        HeaderText="EMPLOYEE_ACCOUNT_TYPE" SortExpression="EMPLOYEE_ACCOUNT_TYPE" /> 
       <asp:BoundField DataField="EMPLOYEE_ACCOUNT_NUMBER" 
        HeaderText="EMPLOYEE_ACCOUNT_NUMBER" SortExpression="EMPLOYEE_ACCOUNT_NUMBER" /> 
       <asp:BoundField DataField="EMPLOYER_COMPUTED_AMOUNT" 
        HeaderText="EMPLOYER_COMPUTED_AMOUNT" 
        SortExpression="EMPLOYER_COMPUTED_AMOUNT" /> 
       <asp:BoundField DataField="EMPLOYEE_GROSS_AMOUNT" 
        HeaderText="EMPLOYEE_GROSS_AMOUNT" SortExpression="EMPLOYEE_GROSS_AMOUNT" /> 
       <asp:BoundField DataField="EMPLOYER_GROSS_AMOUNT" 
        HeaderText="EMPLOYER_GROSS_AMOUNT" SortExpression="EMPLOYER_GROSS_AMOUNT" /> 
       <asp:CheckBoxField DataField="PAYROLL_EXCLUDE" HeaderText="PAYROLL_EXCLUDE" 
        SortExpression="PAYROLL_EXCLUDE" /> 
       <asp:BoundField DataField="VOID_DATE" HeaderText="VOID_DATE" 
        SortExpression="VOID_DATE" /> 
       <asp:BoundField DataField="BATCH_QUEUE_ID" HeaderText="BATCH_QUEUE_ID" 
        SortExpression="BATCH_QUEUE_ID" /> 
       <asp:BoundField DataField="BATCH_CODE" HeaderText="BATCH_CODE" 
        SortExpression="BATCH_CODE" /> 
       <asp:BoundField DataField="FY" HeaderText="FY" SortExpression="FY" /> 
       <asp:BoundField DataField="END_DATE" HeaderText="END_DATE" 
        SortExpression="END_DATE" /> 
       <asp:BoundField DataField="COMMENTS" HeaderText="COMMENTS" 
        SortExpression="COMMENTS" /> 
       <asp:BoundField DataField="BATCH_CRITERIA_USED" 
        HeaderText="BATCH_CRITERIA_USED" SortExpression="BATCH_CRITERIA_USED" /> 
       <asp:BoundField DataField="COLUMN_VALUE" HeaderText="COLUMN_VALUE" 
        SortExpression="COLUMN_VALUE" /> 
       <asp:BoundField DataField="REPLACEMENT" HeaderText="REPLACEMENT" 
        SortExpression="REPLACEMENT" /> 
       <asp:BoundField DataField="LAST_NAME" HeaderText="LAST_NAME" 
        SortExpression="LAST_NAME" /> 
       <asp:BoundField DataField="FIRST_NAME" HeaderText="FIRST_NAME" 
        SortExpression="FIRST_NAME" /> 
       <asp:BoundField DataField="MIDDLE_NAME" HeaderText="MIDDLE_NAME" 
        SortExpression="MIDDLE_NAME" /> 
      </Columns> 
     </asp:GridView> 
     <br /> 
     <br /> 
&nbsp;&nbsp; 

    </div> 
    </form> 
</body> 
</html> 

感謝。

更新:

我總算使從日曆中選擇日期,留在原地,並作爲參數(現在用戶選擇日曆日期,然後確認鍵/ BUTTON2這是以前導出到Excel按鈕,現在button3),但GridView沒有顯示存儲過程的結果,即使設置了參數。沒有錯誤出現。到底是怎麼回事?

下面的代碼現在的樣子:

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

namespace WebApplication3 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     DateTime fmDate = new DateTime(); 
     DateTime toDate = new DateTime(); 


     protected void Page_Load(object sender, EventArgs e) 
     { 
     } 

     protected void Button2_Click(object sender, EventArgs e) 
     { 

      SqlDataSource SqlDataSource1 = new SqlDataSource(); 
      SqlDataSource1.ID = "SqlDataSource1"; 
      this.Page.Controls.Add(SqlDataSource1); 
      SqlDataSource1.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["BIZ_DBConnectionString"].ConnectionString; 
      SqlDataSource1.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; 
      SqlDataSource1.SelectCommand = "Payrolldeduction"; 
      SqlDataSource1.SelectParameters.Clear(); 

      FormParameter fmDate = new FormParameter("@Param1", Calendar1.SelectedDate.ToString()); 
      FormParameter toDate = new FormParameter("@Param2", Calendar2.SelectedDate.ToString()); 
      SqlDataSource1.SelectParameters.Add(fmDate); 
      SqlDataSource1.SelectParameters.Add(toDate); 

      GridView1.DataSource = SqlDataSource1; 
      GridView1.DataBind(); 

     } 

     protected void Button3_Click(object sender, EventArgs e) 
     { 
      GridView1.AllowPaging = true; 
      GridView1.AllowSorting = false; 
      GridView1.DataBind(); 

      Response.ClearContent(); 
      Response.AddHeader("content-disposition", "attachment; filename=newexcelreport.xls"); 
      Response.ContentType = "application/excel"; 
      System.IO.StringWriter sw = new System.IO.StringWriter(); 
      HtmlTextWriter htw = new HtmlTextWriter(sw); 
      GridView1.RenderControl(htw); 
      Response.Write(sw.ToString()); 

      GridView1.AllowPaging = true; 
      GridView1.AllowSorting = false; 
      GridView1.DataBind(); 
     } 

     protected void Calendar1_SelectionChanged(object sender, EventArgs e) 
     { 
      fmDate = Calendar1.SelectedDate; 
      fromDate.Text = Calendar1.SelectedDate.ToString(); 
      SqlDataSource1.SelectParameters[0].DefaultValue = fmDate.ToString(); 

     } 

     protected void Calendar2_SelectionChanged(object sender, EventArgs e) 
     { 
      toDate = Calendar2.SelectedDate; 
      SqlDataSource1.SelectParameters[1].DefaultValue = toDate.ToString(); 
     } 

     } 
    } 

ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication3.WebForm1" EnableEventValidation="false" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     .style1 
     { 
      text-align: center; 
     } 
     .style2 
     { 
      text-align: left; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div class="style1" style="margin-left: 40px"> 

     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:BIZ_DBConnectionString %>" 
      SelectCommand="Payrolldeduction" SelectCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:Parameter DbType="DateTime" Name="fromDate" /> 
       <asp:Parameter DbType="DateTime" Name="toDate" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
     <div class="style1"> 

     Payroll Report<br /> 
     </div> 
     <div class="style2"> 
      <br /> 
      From:</div> 

      <asp:TextBox runat="server" ID="fromDate" Text=""></asp:TextBox> 
     <asp:Calendar ID="Calendar1" runat="server" style="text-align: left"> </asp:Calendar> 
     <div class="style2"> 
      To:</div> 
     <asp:Calendar ID="Calendar2" runat="server" style="text-align: left"> 
     </asp:Calendar> 
     <br /> 
     <br /> 
     <br /> 
     <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Confirm" /> 
     <br /> 
     <asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="Export" /> 
     <br /> 
     <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="true"> 
     </asp:GridView> 
     <br /> 
     <br /> 
&nbsp;&nbsp; 

    </div> 
    </form> 
</body> 
</html> 

回答

0
  1. 你永遠不叫的Page_Load作爲一個GridView事件處理程序。除了根據您的代碼,無論如何它什麼都不做,它每次回到您的頁面回覆時都會調用,因爲無論引發回發的按鈕如何,它都會調用
  2. 您的SqlDataSource選擇參數應爲Control Parameters引用2個日曆控件。這意味着你不需要處理日曆的SelectionChanged事件,它將是自動的。但...
  3. 無論如何,Calendar控制自動回發,這意味着您需要通過asp valdiation或存儲過程來驗證日期,並且只有在日期有任何意義時才返回DataSet。
  4. 至於你的GridView - 它會一直嘗試刷新,因爲你這樣做:DataSourceID="SqlDataSource1"。在任何asp數據綁定控件中,當您設置DataSourceID屬性時,控件將始終在每次回發中調用DataBind()。

更新2015年3月2日〜1850EST

protected void Button2_Click(object sender, EventArgs e) 
{ 
    // validate the dates here then: 

    // If you MUST use Parameters over ControlParameters, 
    // then you need to assign the date here like this: 
    SqlDataSource1.SelectParameters("fromDate").DefaultValue = Calendar1.SelectedDate.ToString() 
    SqlDataSource1.SelectParameters("toDate").DefaultValue = Calendar2.SelectedDate.ToString() 

    // No need to force databind because in the markup you set the property 
    //  DataSourceID="SqlDataSource1" 
    // This will force the Gridview to call DataBind() on each 
    // postback. And Control changed events (button click in this case) 
    // occur before DataBind() events 

    //############################################################### 
    //############################################################### 

    //None of this stuff is needed. It's already done in the markup: 

    //############################################################### 
    SqlDataSource SqlDataSource1 = new SqlDataSource(); 
    SqlDataSource1.ID = "SqlDataSource1"; 
    this.Page.Controls.Add(SqlDataSource1); 
    SqlDataSource1.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["BIZ_DBConnectionString"].ConnectionString; 
    SqlDataSource1.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; 
    SqlDataSource1.SelectCommand = "Payrolldeduction"; 
    SqlDataSource1.SelectParameters.Clear(); 

    FormParameter fmDate = new FormParameter("@Param1", Calendar1.SelectedDate.ToString()); 
    FormParameter toDate = new FormParameter("@Param2", Calendar2.SelectedDate.ToString()); 
    SqlDataSource1.SelectParameters.Add(fmDate); 
    SqlDataSource1.SelectParameters.Add(toDate); 

    GridView1.DataSource = SqlDataSource1; 
    GridView1.DataBind(); 
    //############################################################### 
    //############################################################### 
} 
+0

請看第一篇文章的更新。你能幫助我嗎?謝謝。 – 2015-03-02 22:12:45

+0

查看我的帖子更新 – fnostro 2015-03-02 23:43:33