There are a lot of techniques how to implement paging. For example have a look at
Paging of Large Resultsets in ASP.NET[
^]
However, if that is the whole query you use, you seem to be missing boundaries for the fetch, so you select everything from the database and do the paging on client side. I believe that the query should be something like
SELECT TOP 10 a.*
FROM ( SELECT ROW_NUMBER() OVER (ORDER BY Item_ID) AS ROW_NUM
,I.[ITEM_ID]
,I.[ITEM_NBR]
,I.[ITEM_CATEGORY_ID]
,I.[ITEM_CATEGORY_NAME]
FROM dbo.zipcode ) a
WHERE ROW_NUM > @start_row_number