Вы можете вставить свой источник данных в сеанс.
, затем проверить, не равен ли ваш источник данных в сеансе, и затем получить его.
Таким образом, вы получите данные только один раз иесли вам нужно получить свежие данные (скажем, потому что вы что-то обновили), просто очистите переменную сеанса, которая содержит ваш источник данных.
РЕДАКТИРОВАТЬ:
вот половина попыткиНапример, (под этим я подразумеваю, что я не собираюсь менять страницу, потому что я предполагаю, что вы уже знаете, как это сделать)
protected void PageChanging(object sender, GridViewPageEventArgs e)
{
if(Session["YourSessionVariableForData"] == null)
Session["YourSessionVariableForData"] = YourDataCall();
YourGridView.PageIndex = e.NewPageIndex;
YourGridView.DataSource = ((YourDataType)Session["YourSessionVariableForData"]);
YourGridView.DataBind();
}