2016-03-22 3 views
0

3つのセッション変数を使用する単純なGridViewがあります。 SQL Server 2012データベースのストアドプロシージャの入力パラメータとして、ユーザーログイン時にキャプチャされるCoName、およびPurchaseOrderDate、およびHeatNumber(これらはオプションです)をテキストボックスに取り込みます。 CustomerLanding.aspxページに検索ボタンがあり、そのボタンをクリックすると、現在GridViewがあるTestReportLanding.aspxページにユーザーがリダイレクトされます。このシナリオでは、すべてが機能します。GridViewが行を返さない

GridViewをCustomerLanding.aspxに移動したいので、検索パラメータと検索ボタンがある同じページに検索結果を表示できます。最終的には、AJAXを使用してアップデートしたいと思いますが、今はGridViewを別のdivに配置しています。この設定を使用すると、オプションのパラメータ(PurchaseOrderDateおよびHeatNumber)が指定されている場合にのみクエリが返されます。私のストアドプロシージャは、それが検索のためにCoNameを必要とするので、オプションのパラメータを空にして、もっと多くの行を返す必要があります。

.NETに若干新しくなっているので、私はここで単純なものが欠けていると思っています。ここで

は私のGridViewのコードは、SqlDataSourceコントロールと一緒にCustomerLandingである:

<div class="col-xs-12 col-lg-10"> 
<asp:Label ID="NoRecordsFound" runat="server" Visible ="false" Text="No records found."></asp:Label> 
       <asp:GridView ID="GridView1" runat="server" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" GridLines="Vertical" BackColor="White" ForeColor="Black" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"> 
        <AlternatingRowStyle BackColor="#CCCCCC" /> 
        <Columns> 
         <asp:BoundField DataField="doc" HeaderText="doc" SortExpression="doc" /> 
         <asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" /> 
         <asp:BoundField DataField="Heat" HeaderText="Heat" SortExpression="Heat" /> 
         <asp:BoundField DataField="Dir" HeaderText="Dir" SortExpression="Dir" /> 
        </Columns> 
       </asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:iiConnectionString %>" SelectCommand="sp_test_reports" SelectCommandType="StoredProcedure"> 
        <SelectParameters> 
         <asp:SessionParameter Name="CustomerName" SessionField="CoName" Type="String" /> 
         <asp:SessionParameter DbType="Date" Name="Date" SessionField="PurchaseOrderDate" /> 
         <asp:SessionParameter Name="Heat" SessionField="HeatNumber" Type="String" /> 
        </SelectParameters> 
       </asp:SqlDataSource> 
</div> 

そして、何、それはここに価値があることは私のストアドプロシージャであるため、データグリッドがあるとき、それは動作しますので、(私はこれは問題ではありません確信しています別々のページに:

CREATE PROCEDURE [dbo].[sp_test_reports] 
-- Add the parameters for the stored procedure here 
@CustomerName varchar(50), 
@Date date, 
@Heat varchar(50) 

AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

-- Insert statements for procedure here 


IF @Heat IS NULL AND @Date IS NULL 
    SELECT DISTINCT TOP 1000 d.doc, d.Date, dl.Heat, d.Dir 
    FROM documents d 
    INNER JOIN Documents_Line_Items dl ON d.Doc = dl.Doc 
    WHERE d.type = 2 and d.Customer = @CustomerName; 
ELSE IF @Heat IS NOT NULL AND @Date IS NULL 
    SELECT DISTINCT(d.doc), d.Date, dl.Heat, d.Dir 
    FROM documents d 
    INNER JOIN Documents_Line_Items dl ON d.Doc = dl.Doc 
    WHERE d.type = 2 AND d.Customer = @CustomerName AND dl.Heat = @Heat; 
ELSE IF @Heat IS NULL AND @Date IS NOT NULL 
    SELECT DISTINCT(d.doc), d.Date, dl.Heat, d.Dir 
    FROM documents d 
    INNER JOIN Documents_Line_Items dl ON d.Doc = dl.Doc 
    WHERE d.type = 2 AND d.Customer = @CustomerName AND d.Date = @Date; 
ELSE IF @Heat IS NOT NULL AND @Date IS NOT NULL 
    SELECT DISTINCT(d.doc), d.Date, dl.Heat, d.Dir 
    FROM documents d 
    INNER JOIN Documents_Line_Items dl ON d.Doc = dl.Doc 
    WHERE d.type = 2 AND d.Customer = @CustomerName AND d.Date = @Date AND dl.Heat = @Heat; 


END 

そして、ここに私の検索ボタンの背後にあるコードです:。 注私はここのResponse.Redirectのコメントを外した場合に、GridViewコントロールはそれが必要のように動作していることが

protected void TestReports_Click(object sender, EventArgs e) 
    { 
     Session["PurchaseOrderDate"] = DatePurchaseOrder.Text; 
     Session["HeatNumber"] = HeatText.Text; 



     GridView1.Visible = true; 



     MessageBox.Show(Session["CoName"].ToString()); 
     MessageBox.Show(Session["HeatNumber"].ToString()); 

     if (GridView1.Rows.Count == 0) 
     { 
      NoRecordsFound.Visible = true; 
     } 
     else 
     { 
      NoRecordsFound.Visible = false; 
     } 

     //Response.Redirect("TestReportLanding.aspx", false); 

    } 

ご協力いただきありがとうございます。

答えて

0

ストアドプロシージャでは、2つのオプションのパラメータをNULLに初期化します。彼らは何かに初期化されていない限り、ストアドプロシージャの

@CustomerName varchar(50), 
@Date date = NULL, 
@Heat varchar(50) = NULL 

パラメータは、本当に「オプション」ではありません。

+0

私はやったが、まだレコードを取得していない。このspは、ユーザーを別のページにリダイレクトするときに機能することに注意してください。私はDateとHeatをNULLに初期化しますが、意味があります。 – CuriousOne

+0

2つのオプションフィールドにセッション変数を使用する特別な理由はありますか?これらのパラメータをasp:controlパラメータに変更することもできます: BenM

+0

結果が得られたら興味がありますボタンを2回押すとページが投稿(またはリダイレクト)されるまで、セッションにテキストボックスの値を保存しない、ある種の奇妙なポストバックの問題かもしれません。 – BenM

関連する問題