2016-03-22 38 views
0

我有一個簡單的GridView使用3個會話變量;在用戶登錄時捕獲的CoName以及在文本框中捕獲的PurchaseOrderDate和HeatNumber(這兩個都是可選的)作爲SQLServer 2012數據庫上存儲過程的輸入參數。我有一個CustomerLanding.aspx頁面,它上面有一個搜索按鈕,點擊後,用戶將重定向到一個TestReportLanding.aspx頁面,該頁面當前具有GridView。一切工作,因爲它應該在這種情況下。GridView不返回行

我想將GridView移動到CustomerLanding.aspx,這樣我就可以在具有搜索參數和搜索按鈕的同一頁面上顯示搜索結果。最終我想使用AJAX進行更新,但現在我只是將GridView放在不同的div中。當我使用此設置時,查詢僅在提供可選參數(PurchaseOrderDate和HeatNumber)時返回結果。我的存儲過程只需要CoName進行搜索,所以我應該得到更多的行,並將可選參數留空。

對於.NET來說有點新鮮,我希望我在這裏錯過簡單的東西。

這裏是CustomerLanding我的GridView控件代碼使用SqlDataSource一起:

<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> 

而對於它的價值,這裏是我的存儲過程(我敢肯定這不是問題,因爲它的工作原理在DataGrid是一個單獨的頁面上:

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就像它應該

。 0
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

在您的存儲過程中,將您的兩個可選參數初始化爲NULL。

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

存儲過程的參數不是真正的「可選」,除非它們已被初始化爲某種東西。

+0

我剛剛做了,仍然沒有記錄。請記住,當我將用戶重定向到另一個頁面時,此sp會起作用。我會保持日期和熱初始化爲NULL,但它是有道理的。 – CuriousOne

+0

是否有任何特殊的原因使用兩個可選字段的會話變量?你可以改變這些參數爲asp:controlparameters代替: BenM

+0

我也很好奇,如果你得到任何結果如果你按了兩次按鈕。可能是某種奇怪的回發問題,它不會將文本框中的值保存到會話中,直到頁面被髮布(或重定向)爲止。 – BenM