2015-03-02 4 views
0

В принципе, у меня есть SQLDataSource, который является хранимой процедурой, которая имеет два параметра (datetime). У меня есть два календаря, которые задают эти параметры при щелчке. Я проверил хранимую процедуру и параметры, но 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> 

Спасибо.

Update:

мне как-то удалось сделать даты от выбора календаря остаться и действовать в качестве параметров (теперь пользователь выбирает календарные даты, а затем кнопку подтверждения/button2, который был ранее Экспорт в Excel которая теперь является кнопкой 3), но 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, которые ссылаются на два элемента управления календарем. Это означает, что вам не нужно обрабатывать события SelectionChanged в календаре, это будет автоматически. BUT ...
  3. Календарный контроль в любом случае, это означает, что вам нужно проверить даты либо по asp valdiation, либо в вашей хранимой процедуре, и только вернуть DataSet, если даты имеют какое-либо значение.
  4. Что касается вашего GridView - он всегда будет пытаться обновиться, потому что вы делаете это: DataSourceID="SqlDataSource1". В любом управлении базой данных asp, когда вы устанавливаете свойство DataSourceID, ваш контроль будет ВСЕГДА делать вызов DataBind() при каждой обратной передаче.

Обновление 2015-03-02 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

Посмотрите, пожалуйста, на обновление первого поста. Не могли бы вы мне помочь? Благодарю. –

+0

см. Обновление к моему сообщению – fnostro

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