2010-10-31 75 views
0

我在.net中有這個奇怪的gridview問題,至今我還沒有找到可以解決的問題。 這是什麼關於: 我有一個由sqldatareader使用的存儲過程。 然後我有閱讀器讀取所有值並從存儲過程中顯示。 問題現在正在發生。當我輸入參數的某些特定值時,所有內容都可以在屏幕上呈現出來。例如,我有日期和最小/最大量,並且gridview正確填充。 當我包括一個參數,可以說客戶電子郵件,讀者說,這是有行,但在GridView保持空白:asp.net中的奇怪gridview問題

SqlDataReader rdrAdvancedReport = commAdvanced.ExecuteReader(); 
      while (rdrAdvancedReport.Read()) 
      { 
       gvResults.DataSource = rdrAdvancedReport; 
       gvResults.DataBind(); 
      } 
      rdrAdvancedReport.Close(); 

更重要的是「有趣」的是,我有另外一個循環一次在GridView循環完成,給我所有訂單的總金額,並且標籤填寫正確。

if (rdrTotal.HasRows) 
       { 
        while (rdrTotal.Read()) 
        { 
         orderTotalSum = orderTotalSum + Convert.ToDouble(rdrTotal["OrderTotal"]); 

任何想法傢伙什麼可以是問題?

這裏是存儲過程太:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE SearchCust 
(
@StartTime datetime = null, 
@EndTime datetime = null, 
@CustomerEmail nvarchar(255) = null,  
@Username nvarchar(255) = null, 
@CustomerName nvarchar(255) = null, 
@MinimumOrderAmount decimal = null, 
@MaximumOrderAmount decimal = null, 
) 
AS 
BEGIN 
SET NOCOUNT ON 

SELECT DISTINCT o.OrderID, o.OrderTotal, o.ShippingCountry, n.Name AS OrderStatus, p.Name AS PaymentStatus FROM Order o 
JOIN OrderStatus n ON o.OrderStatusID = n.OrderStatusID 
JOIN PaymentStatus p ON o.OrderStatusID = p.PaymentStatusID 
JOIN Customer c ON o.CustomerID = c.CustomerID 
JOIN OrderProduct op ON o.OrderID = op.OrderID 
JOIN ProductValue pv ON op.ProductVariantID = pv.ProductVariantId 
WHERE (o.CreatedOn > @StartTime OR @StartTime IS NULL) 
AND (o.CreatedOn < @EndTime OR @EndTime IS NULL) 
AND (o.ShippingEmail = @CustomerEmail OR @CustomerEmail IS NULL)  
AND (c.Username = @Username OR @Username IS NULL) 
AND (o.BillingFirstName + ' ' + o.BillingLastName = @CustomerName OR @CustomerName IS NULL) 
AND (o.ShippingFirstName + ' ' + o.ShippingLastName = @CustomerName OR @CustomerName IS NULL) 
AND (o.OrderTotal > @MinimumOrderAmount or @MinimumOrderAmount IS NULL) 
AND (o.OrderTotal < @MaximumOrderAmount OR @MaximumOrderAmount IS NULL) 
ORDER BY o.OrderID 
END 

在此先感謝

回答

0

試試這個,而不是...

SqlConnection conn = new SqlConnection(connectionString); 
SqlCommand commAdvanced= new SqlCommand(commandString); 
conn.Open(); 
commAdvanced.Connection = conn; 
SqlDataReader rdrAdvancedReport = commAdvanced.ExecuteReader(CommandBehavior.CloseConnection); 
gvResults.DataSource = rdrAdvancedReport; 
gvResults.DataBind(); 

因爲你是它數據綁定到GridView,你不通過的結果首先設置有循環。

+0

thx man,you made my day ! – Laziale 2010-11-01 12:41:28

1

您只能讀取一個SqlDataReader一次。

在通過所有返回的行調用Read()後,讀取器完成;它不能返回並再次讀取行。

相反,您應該使用SqlDataAdapter來填充DataTable

+0

對不起,我做了一個錯誤,複製代碼,這裏是代碼的樣子,我有兩個獨立的數據讀取器 – Laziale 2010-10-31 21:13:55

+0

我在解釋代碼時犯了一個錯誤,我只是改了帖子,我有兩個不同的sql讀取器。事情是,正如我所說的,它的一些參數正確工作,當我開始訂購更多參數時,它不能正常工作 – Laziale 2010-10-31 21:15:32

+0

進一步瞭解更多關於您的onRowDataBound事件來執行您的總訂單總量計算 – 2010-11-01 01:00:08

0

你不應該在while循環內數據綁定你的網格。

您目前正在爲每行重新綁定數據,這會導致意外的行爲。