C#网格视图没有';t显示SQL过程返回
本文关键字:显示 SQL 过程 返回 视图 网格 | 更新日期: 2023-09-27 18:27:08
我的过程返回25行。在调试模式下运行时,我在DataContext
中看到了它。但数据绑定后的网格视图没有显示任何内容。当我将select
子句更改为时
Select *
from pgnchess
order by GameID
OFFSET @Offset ROW
FETCH NEXT @PageSize ROW ONLY
一切都很好。当我在SQL Server Management Studio中执行过程时,没有任何参数,运行也很好。
以下是我的SQL Server过程
CREATE PROCEDURE [dbo].[GetGamesWithPlayer](
@qText nvarchar(40) = '%',
@qColumn nvarchar(10) = 'BlackWhite',
@orderColumn nvarchar(20) = 'GameID',
@orderDirection bit = 1,
@PageSize int = 25,
@CurrentPage int = 0)
AS
BEGIN
DECLARE @Offset int;
SET NOCOUNT ON;
SET @Offset = @PageSize * @CurrentPage
SELECT
[GameID], [Event], [Site], [Date], [White], [Black], [Result], [ECO]
FROM
[dbo].[pgnGames]
WHERE
CASE @qColumn
WHEN 'BlackWhite' THEN [Black]
WHEN 'Event' THEN [Event]
WHEN 'Black' THEN [Black]
WHEN 'White' THEN [White]
WHEN 'ECO' THEN [ECO]
WHEN 'Result' THEN [Result]
END LIKE '%'+ @qText +'%' OR
CASE @qColumn
WHEN 'BlackWhite' THEN [White]
WHEN 'Event' THEN [Event]
WHEN 'Black' THEN [Black]
WHEN 'White' THEN [White]
WHEN 'ECO' THEN [ECO]
WHEN 'Result' THEN [Result]
END LIKE '%'+ @qText +'%'
ORDER BY
CASE WHEN @orderColumn = 'Black'
AND @orderDirection = 0 THEN [Black] END DESC,
CASE WHEN @orderColumn = 'Black'
AND @orderDirection = 1 THEN [Black] END,
CASE WHEN @orderColumn = 'Date'
AND @orderDirection = 0 THEN [Date] END DESC,
CASE WHEN @orderColumn = 'Date'
AND @orderDirection = 1 THEN [Date] END,
CASE WHEN @orderColumn = 'ECO' AND @orderDirection = 0 THEN [ECO] END DESC,
CASE WHEN @orderColumn = 'ECO' AND @orderDirection = 1 THEN [ECO] END,
CASE WHEN @orderColumn = 'Event' AND @orderDirection = 0 THEN [Event] END DESC,
CASE WHEN @orderColumn = 'Event' AND @orderDirection = 1 THEN [Event] END,
CASE WHEN @orderColumn = 'GameID' AND @orderDirection = 0 THEN [GameID] END DESC,
CASE WHEN @orderColumn = 'GameID' AND @orderDirection = 1 THEN [GameID] END,
CASE WHEN @orderColumn = 'Result' AND @orderDirection = 0 THEN [Result] END DESC,
CASE WHEN @orderColumn = 'Result' AND @orderDirection = 1 THEN [Result] END,
CASE WHEN @orderColumn = 'Site' AND @orderDirection = 0 THEN [Site] END DESC,
CASE WHEN @orderColumn = 'Site' AND @orderDirection = 1 THEN [Site] END,
CASE WHEN @orderColumn = 'White' AND @orderDirection = 0 THEN [White] END DESC,
CASE WHEN @orderColumn = 'White' AND @orderDirection = 1 THEN [White] END
OFFSET @Offset ROW
FETCH NEXT @PageSize ROW ONLY
END
GO
这是我的绑定代码:
DateTime startTime = DateTime.Now;
pgDataContext pl = new pgDataContext();
GameList.DataSource = pl.GetGamesWithPlayer(hdr.qText,hdr.qColumn,GlobalVar.sortColumn,GlobalVar.sortOrder, GlobalVar.pageSize, pgIndex);
GameList.DataBind();
recordCount = pl.pgnGames.Count();
GameList.VirtualItemCount = recordCount;
DateTime endTime = DateTime.Now;
TimeSpan span = endTime.Subtract(startTime);
如果将pl.GetGamesWithPlayer结果存储到某个var属性中,并设置断点,那么在调用后是否看到该值中的数据?另外,pgnGames.Count()是否给出了正确的数字?看起来你的代码应该是:
DateTime startTime = DateTime.Now;
pgDataContext pl = new pgDataContext();
var games = pl.GetGamesWithPlayer(hdr.qText,hdr.qColumn,GlobalVar.sortColumn,GlobalVar.sortOrder, GlobalVar.pageSize, pgIndex);
GameList.DataSource = games;
GameList.DataBind();
recordCount = pl.pgnGames.Count();
GameList.VirtualItemCount = recordCount;
DateTime endTime = DateTime.Now;
TimeSpan span = endTime.Subtract(startTime);
但我不确定你的数据访问层是如何工作的。这假设pl.GetGamesWithPlayer返回pgnGames对象。如果该方法在调用时只填充pl.pgnGames,那么您只需执行以下操作:
DateTime startTime = DateTime.Now;
pgDataContext pl = new pgDataContext();
pl.GetGamesWithPlayer(hdr.qText,hdr.qColumn,GlobalVar.sortColumn,GlobalVar.sortOrder, GlobalVar.pageSize, pgIndex);
GameList.DataSource = pl.pgnGames;
GameList.DataBind();
recordCount = pl.pgnGames.Count();
GameList.VirtualItemCount = recordCount;
DateTime endTime = DateTime.Now;
TimeSpan span = endTime.Subtract(startTime);
如果你确定正确的数据进入了数据源,那么我建议你放入一些网格事件,比如DataBinding、RowDataBound等,然后逐步查看是否可以说出数据不可用的原因。