1

私のプロシージャは 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);
4

1 に答える 1

0

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 などのグリッド イベントをいくつか挿入して、データが送信されない理由がわかるかどうかを確認することをお勧めします。利用可能。

于 2013-08-09T18:26:20.213 に答える