183715 (596702), страница 12
Текст из файла (страница 12)
TypeName="ComponentsDB.CatalogDB" SelectCountMethod="GetCountByGenre" SelectMethod="GetPageProductsByGenre" EnablePaging="true" OnSelected="ObjectDataSource_Selected" EnableCaching="true" CacheDuration="360">
Type="Int32" /> , где EnablePading = “true” - включает разбиение на страницы в источнике данных. SelectCountMethod = "GetCountByGenre" – метод для подсчёта общего кол-ва строк в таблице. Данный метод необходим, для того чтобы GridView мог создать корректное количество ссылок страниц на панели навигации. SelectMethod = "GetPageProductsByGenre" – метод выбирающий информацию для текущей страницы. Метод GetCountByGenre, вызывает хранимую процедуру GetCountByGenre, которая возвращает кол-во альбомов в каталоге, относящихся к жанру, указанному в параметре GenreID. Метод GetCountByGenre: public static int GetCountByGenre(int GenreID) { SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["connStr"].ConnectionString); SqlCommand cmd = new SqlCommand("GetCountByGenre", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("GenreID", SqlDbType.Int); cmd.Parameters["GenreID"].Value = GenreID; int count=-1; try { conn.Open(); count = (int)cmd.ExecuteScalar(); } catch(SqlException) { conn.Close(); } finally { conn.Close(); } return count; } Хранимая процедура GetCountByGenre CREATE PROCEDURE GetCountByGenre (@GenreID INT) AS SELECT COUNT(*) FROM Catalogue WHERE GenreID = @GenreID GO Метод GetPageProductsByGenre вызывает хранимую процедуру GetPageProductsByGenre, которая возвращает данные для текущей страницы GridView. Метод GetPageProductsByGenre: public static DataSet GetPageProductsByGenre(int startRowIndex, int maximumRows, int GenreID) { SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["connStr"].ConnectionString); SqlCommand cmd = new SqlCommand("GetPageProductsByGenre", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("Start", SqlDbType.Int); cmd.Parameters["Start"].Value = startRowIndex; cmd.Parameters.Add("Count", SqlDbType.Int); cmd.Parameters["Count"].Value = maximumRows; cmd.Parameters.Add("GenreID", SqlDbType.Int); cmd.Parameters["GenreID"].Value = GenreID; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; try { conn.Open(); da.Fill(ds); } catch (SqlException) { conn.Close(); return null; } finally { conn.Close(); } return ds; } Хранимая процедура GetPageProductsByGenre: CREATE PROCEDURE GetPageProductsByGenre (@Start INT, @Count INT, @GenreID INT) AS CREATE TABLE #TempProductsList ( Num INT IDENTITY (0,1) PRIMARY KEY, ProductID INT, ArtistName NVARCHAR(50), ArtistID INT, AlbumName NVARCHAR(50), UnitCost MONEY, Presence BIT ) INSERT INTO #TempProductsList (ProductID, ArtistName, ArtistID, AlbumName, UnitCost, Presence) SELECT ProductID, ArtistName, Catalogue.ArtistID, AlbumName, UnitCost, Presence FROM Catalogue, Artists WHERE GenreID = @GenreID AND Catalogue.ArtistID = Artists.ArtistID ORDER BY ArtistName DECLARE @FromNum INT DECLARE @ToNum INT SET @FromNum = @Start SET @ToNum = @Start + @Count – 1 SELECT ProductID, ArtistName, ArtistID, AlbumName, UnitCost, Presence FROM #TempProductsList WHERE Num >= @FromNum AND Num <= @ToNum GO