2010-10-31 80 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循环内数据绑定你的网格。

您目前正在为每行重新绑定数据,这会导致意外的行为。